public override void Execute(IMessage message) { var split = message.Content.Split(' '); lock (dbLock) { if (split.Length <= 1) { DiscordNETWrapper.SendText( "Hi im a database, I save data. (secretly im just a chonky json file but psssst, tell no one)\n" + "If you want to build a database for the discord server you are writing this message on type `$messageDB build`, " + "but only trained professionals are allowed to use that command because it takes a lot of resources to exectue it\n" + $"Other commands that you can use once a database has been build are: " + $"{commands.Where(x => !string.IsNullOrWhiteSpace(x.name)).Select(x => $"`{x.name}`").Combine(", ")}", message.Channel).Wait(); return; } else if (split[1] == "build") { if (message.Author.Id != Program.Master.Id) { DiscordNETWrapper.SendText("I'm sorry Dave, I'm afraid I can't do that", message.Channel).Wait(); return; } if (!File.Exists(dbPath)) { return; } var curGuild = Program.GetGuildFromChannel(message.Channel); DBGuild db = DBFromGuild(curGuild); File.WriteAllText(GetFilePath(db), CreateJson(db)); DiscordNETWrapper.SendText("Server db built!", message.Channel).Wait(); } else { var command = commands.FirstOrDefault(x => x.name == split[1]); if (command == null) { return; } DBGuild dbGuild = null; if ((dbGuild = GetGuild(message)) == null) { return; } command.doStuffLul(dbGuild, message, split.Skip(2).ToArray()); } } }
public DBGuild DBFromGuild(SocketGuild guild) { DBGuild re = new DBGuild { CreatedAt = guild.CreatedAt.UtcDateTime, IconUrl = guild.IconUrl, Id = guild.Id, Name = guild.Name, OwnerId = guild.OwnerId, SplashUrl = guild.SplashUrl, TextChannels = new List <DBTextChannel>() }; foreach (var textChannel in guild.TextChannels) { DBTextChannel reChannel = new DBTextChannel { CreatedAt = textChannel.CreatedAt.UtcDateTime, GuildId = re.Id, Id = textChannel.Id, Name = textChannel.Name, Messages = new List <DBMessage>() }; foreach (var message in DiscordNETWrapper.EnumerateMessages(textChannel as IMessageChannel)) { DBMessage reMessage = new DBMessage { Attachements = message.Attachments.Select(x => x.Url).ToArray(), AuthorId = message.Author.Id, AuthorName = message.Author.Username, Channel = message.Channel.Id, Content = message.Content, Link = message.GetJumpUrl(), Embeds = message.Embeds.Select(x => new DBEmbed() { AuthorURL = x.Author.HasValue ? x.Author.Value.Url : "", Color = x.Color, Desc = x.Description, Fields = x.Fields.Select(y => new DBEmbedField() { Title = y.Name, Content = y.Value }).ToList(), Footer = x.Footer.HasValue ? x.Footer.Value.Text : "", ImageUrl = x.Image.HasValue ? x.Image.Value.Url : "", ThumbnailUrl = x.Thumbnail.HasValue ? x.Thumbnail.Value.Url : "", Timestamp = x.Timestamp.HasValue ? x.Timestamp.Value.UtcDateTime : DateTime.MinValue, Title = x.Title }).ToList(), Reactions = message.Reactions.Select(x => new DBReaction() { id = x.Key is Emote ? (x.Key as Emote).Id : 0, name = x.Key.Name, print = x.Key.Print(), count = x.Value.ReactionCount }).ToList(), Id = message.Id, IsPinned = message.IsPinned, MentionedChannels = message.MentionedChannelIds.ToList(), MentionedRoles = message.MentionedRoleIds.ToList(), MentionedUsers = message.MentionedUserIds.ToList(), Timestamp = message.Timestamp.UtcDateTime }; reChannel.Messages.Add(reMessage); } re.TextChannels.Add(reChannel); } return(re); }
string CreateJson(DBGuild db) => JsonConvert.SerializeObject(db);
string GetFilePath(DBGuild g) => $"{dbDirPath}{g.Id}db.json";