Exemplo n.º 1
0
        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());
                }
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 string CreateJson(DBGuild db) => JsonConvert.SerializeObject(db);
Exemplo n.º 4
0
 string GetFilePath(DBGuild g) => $"{dbDirPath}{g.Id}db.json";