Example #1
0
        async Task SingleRule(ParseResult result, IMessageCreatedEvent messageEvent)
        {
            var guild = messageEvent.Guild !;

            var num = result.GetIntArg("num");

            await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync();

            guild !.Rules.Sort((a, b) => a.Number - b.Number);
            var rule = guild !.Rules.Find(r => r.Number == num);

            if (rule == null)
            {
                await messageEvent.RespondError($"Could not find rule {num}");

                return;
            }

            var text =
                $"{DiscordEmoji.FromName(DiscordBot.Instance.Client, $":{rule.Number.ToName()}:")} {rule.Description}";

            var embed = DiscordBot.Instance.BaseEmbed();

            embed.Description = text;

            await messageEvent.Respond(embed.Build());
        }
Example #2
0
        private async Task RemoveRule(ParseResult result, IMessageCreatedEvent messageEvent)
        {
            var guild = messageEvent.Guild !;

            var num = result.GetIntArg("num");

            await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync();

            guild !.Rules.Sort((a, b) => a.Number - b.Number);
            var rule = guild !.Rules.Find(r => r.Number == num);

            if (rule == null)
            {
                messageEvent.RespondError($"Could not find rule {num}");
                return;
            }

            guild.Rules.Remove(rule);
            messageEvent.Db.Remove(rule);

            guild.Rules.ContinuouslyNumber(((guildRule, i) => guildRule.Number = i), 1);

            messageEvent.Respond("Removed");
            await messageEvent.Db.SaveChangesAsync();

            await UpdateRules(messageEvent);

            return;
        }
Example #3
0
        private async Task UpdateRules(IMessageCreatedEvent messageEvent)
        {
            var guild = messageEvent.Guild !;

            if (guild.RulesChannelId == null ||
                guild.RulesMessageId == null)
            {
                return;
            }

            await messageEvent.Db.Attach(guild).Collection(g => g.Rules).LoadAsync();

            var text = RulesText(guild);

            var embed = DiscordBot.Instance.BaseEmbed();

            embed.Title       = "Server Rules";
            embed.Description = text;
            embed.Author      = null;
            if (guild.RulesChannelId is not null && guild.RulesMessageId != null)
            {
                var DGuild = await _bot.Client.GetGuildAsync(new Snowflake(guild.GuildID));

                var ch = DGuild.GetChannel((guild.RulesChannelId ?? null));

                var me = await ch.GetMessageAsync(guild.RulesMessageId ?? 0L);

                await me.ModifyAsync(embed : embed.Build());
            }
        }
Example #4
0
        private async Task PrintQuote(ParseResult result, IMessageCreatedEvent context)
        {
            var db = context.Db;

            var num = result.GetIntArg("number");

            var guild = context.Guild;

            if (guild != null)
            {
                var quote = (from q in db.Quotes.Include(a => a.Source)
                             where q.number == num && q.GuildID == guild.ID
                             select q).FirstOrDefault();
                if (quote != null)
                {
                    var embed = DiscordBot.Instance.BaseEmbed();
                    embed.Description = quote.Text;

                    if (quote.CreationTime.Year <= 1)
                    {
                        embed.Timestamp = new DateTimeOffset();
                    }
                    else
                    {
                        embed.Timestamp = quote.EventTime;
                    }

                    embed.Author = new DiscordEmbedBuilder.EmbedAuthor();
                    if (quote.Source != null)
                    {
                        var discordGuild = await DiscordBot.Instance.Client.GetGuildAsync(guild.GuildID);

                        var sourceMember = await discordGuild.GetMemberAsync(ulong.Parse(quote.Source.UserID));

                        embed.Author.IconUrl = sourceMember.AvatarUrl;
                        embed.Author.Name    = sourceMember.Nickname ?? sourceMember.Username;
                    }

                    embed.Footer = new DiscordEmbedBuilder.EmbedFooter()
                    {
                        Text = $"on {quote.CreationTime.ToLongDateString()}"
                    };


                    await context.Respond(embed.Build());
                }
            }
        }
Example #5
0
            public override async Task <bool> CheckCondition(CommandFunction func, IMessageCreatedEvent context, ICommandConditionProvider provider)
            {
                var attribute = (CommandPermissionRequired)provider;

                var db = context.Db;

                if (context.Guild is not null)
                {
                    db.Entry(context.Guild).Collection(g => g.PermissionLevels).LoadAsync().Wait();

                    //var member = await ((DiscordMessageCreatedEvent)context)[email protected](ulong.Parse(context.Author.UserID));

                    var DGuild = await _bot.Client.GetGuildAsync(new Snowflake(context.Guild.GuildID));


                    PermissionLevels memberLevel = PermissionLevels.None;

                    if (context.Author.UserID == _conf.Value.Owner ||
                        context.Author.UserID == DGuild.OwnerId.ToString())
                    {
                        memberLevel = PermissionLevels.Owner;
                    }

                    var member = await DGuild.GetMemberAsync(new Snowflake(context.Author.UserID));

                    foreach (var guildLevel in context.Guild.PermissionLevels)
                    {
                        if (member.Roles.Any(r => r.Id.ToString() == guildLevel.RoleID))
                        {
                            if (guildLevel.PermissionLevel > memberLevel)
                            {
                                memberLevel = guildLevel.PermissionLevel;
                            }
                        }
                    }

                    if (attribute._permission > memberLevel)
                    {
                        context.RespondError($"You do not have the needed permissions. \n You must be {attribute._permission.ToString()} or above");
                        return(false);
                    }

                    return(true);
                }

                return(false);
            }
        private async Task ServerSetup(ParseResult result, IMessageCreatedEvent context)
        {
            if (context.Guild != null)
            {
                await context.Respond("Server already active");

                return;
            }

            if (context is DiscordMessageCreatedEvent dmce)
            {
                var message = dmce.@event;

                DiscordGuild discord_guild = message.Guild;


                var member = await message.Guild.GetMemberAsync(message.Message.Author.Id);

                var permissions = member.PermissionsIn(message.Message.Channel);
                if (permissions.HasPermission(Permissions.Administrator) || member.Id.ToString() == config.Value.Owner)
                {
                    Guild?guild = (from g in context.Db.Guilds
                                   where g.GuildID == discord_guild.Id
                                   select g).FirstOrDefault();

                    if (guild == null)
                    {
                        logger.Information($"Registering guild: {discord_guild.Id}");

                        context.Db.Add(new Guild(discord_guild.Name, discord_guild.Id.ToString()));
                        context.Db.SaveChanges();

                        var embed = new DSharpPlus.Entities.DiscordEmbedBuilder()
                        {
                            Description = "Server setup complete!"
                        };

                        await message.Message.RespondAsync(embed : embed.Build());
                    }
                }
                else
                {
                    await message.Message.RespondAsync("You do not have the permission");
                }
            }
        }
Example #7
0
        async Task ListRules(ParseResult result, IMessageCreatedEvent messageEvent)
        {
            var guild = messageEvent.Guild !;

            messageEvent.Db.Attach(guild);
            await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync();


            var text = RulesText(guild);

            var embed = new DiscordEmbedBuilder()
            {
                Description = text
            };

            await messageEvent.Respond(embed.Build());
        }
Example #8
0
        private int Run(ParseResult result, IMessageCreatedEvent context)
        {
            /*
             * string messageTemplate = "Hi! " + DiscordArgumentTypes.GetUser(context, "user").Username + " <a:bolbreach:780085145079119873>";
             * Logger.Information(messageTemplate);
             * //[email protected](messageTemplate);
             *
             * context.Source.Event.Respond(messageTemplate);
             */
            DiscordUser u = (DiscordUser)result.Args["user"];

            string messageTemplate = "Hi! " + u.Username + " <a:bolbreach:780085145079119873>";

            context.RespondBasic(messageTemplate);

            return(1);
        }
Example #9
0
        private async Task AddRule(ParseResult result, IMessageCreatedEvent messageEvent)
        {
            var guild = messageEvent.Guild !;

            var db = messageEvent.Db;

            var rule_count = db.Attach(guild).Collection(g => g.Rules).Query().Count();

            int num = rule_count + 1;

            string text = result.GetStringArg("text");

            guild.Rules.Add(new GuildRule(num, text));
            await messageEvent.Db.SaveChangesAsync();

            await messageEvent.Respond("Added");

            await UpdateRules(messageEvent);
        }
Example #10
0
        public async Task RunCommand(ParseResult result, IMessageCreatedEvent msgEvent)
        {
            var callback = (result.Callback as CommandFunction) !;

            var method     = callback.cmdMeta;
            var permission = method.GetCustomAttributes <CommandAttribute>();

            var commandConditionProviders = permission.ToList();

            _logger.LogInformation(
                "Command {CmdName} has the following conditions:\n" +
                "{Conditions}",
                "CMD name",
                String.Join("\n", commandConditionProviders.Select(p => p.GetType().Name)));

            bool check = true;

            foreach (var attribute in commandConditionProviders)
            {
                var con = ActivatorUtilities.CreateInstance(_provider, attribute.GetCondition()) as CommandCondition;

                check = check && await con !.CheckCondition(callback, msgEvent, attribute);
            }


            if (check)
            {
                try
                {
                    callback.Cmd.Invoke(result, msgEvent);
                }
                catch (Exception e)
                {
                    msgEvent.RespondError(e.Message);
                }
            }
            else
            {
                //msgEvent.RespondError("Couldn't authenticate");
            }
        }
Example #11
0
        private async Task RemoveQuote(ParseResult result, IMessageCreatedEvent context)
        {
            var db = context.Db;

            var num = result.GetIntArg("id");

            var guild = context.Guild;

            var quote = (from q in db.Quotes
                         where q.number == num && q.GuildID == guild !.ID
                         select q).FirstOrDefault();

            if (quote != null)
            {
                await db.Entry(quote).Reference(r => r.Source).LoadAsync();

                guild !.Quotes.Remove(quote);
                await db.SaveChangesAsync();

                var embed = DiscordBot.Instance.BaseEmbed();
                embed.Title       = $"{EmojiHelper.Cross()} Removed Quote";
                embed.Color       = new Optional <DiscordColor>(new DiscordColor(255, 0, 0));
                embed.Description = $"> {quote.Text}\nby {quote.SourceName}";
                embed.Timestamp   = quote.CreationTime.Year > 1 ? quote.CreationTime : new DateTimeOffset();


                embed.Footer = new DiscordEmbedBuilder.EmbedFooter()
                {
                    Text = $"on {quote.CreationTime.ToLongDateString()}"
                };


                await context.Respond(embed.Build());

                return;
            }
            else
            {
                throw new Exception($"There was no quote {num}");
            }
        }
Example #12
0
        private async Task ListQuotes(ParseResult result, IMessageCreatedEvent context)
        {
            var db = context.Db;

            var guild = context.Guild;

            if (guild != null)
            {
                var discordGuildAsync = DiscordBot.Instance.Client.GetGuildAsync(guild.GuildID);

                string text = "";

                var q = from h in db.Quotes.Include(blog => blog.Source)
                        where h.Guild == guild
                        select h;

                foreach (var quote in q)
                {
                    if (quote.Source != null)
                    {
                        var discordGuild = await discordGuildAsync;
                        var sourceMember = (await discordGuild.GetMemberAsync(ulong.Parse(quote.Source.UserID))).Nickname;
                        //var sourceMember = quote.Source.Name;

                        text += $"\n{EmojiHelper.Number(quote.number)} *{quote.Text}* - by {sourceMember}";
                    }
                    else
                    {
                        text += $"\n{EmojiHelper.Number(quote.number)} *{quote.Text}* - by *Anonymous*";
                    }
                }

                var embed = DiscordBot.Instance.BaseEmbed();
                embed.Title       = "Qotes";
                embed.Description = text;
                embed.Author      = null;


                await context.Respond(embed.Build());
            }
        }
Example #13
0
        public void ProcessMessage(IMessageCreatedEvent messageEvent)
        {
            if (messageEvent.Message.Length == 0 || !messageEvent.Message.StartsWith(_config.Value.prefix))
            {
                return;
            }

            var commandText = messageEvent.Message.Remove(0, _config.Value.prefix.Length);


            var res = _cmdTree.tree.ParseString(commandText);

            if (res.error is not null)
            {
                var    usages = res.Nodes.Last().GetUsages(res);
                string text   = "Usage";
                foreach (var item in usages)
                {
                    text += $"\n {item}";
                }

                messageEvent.RespondError(text);
            }
            if (res.Callback is not null)
            {
                try
                {
                    if (res.Callback is CommandFunction func)
                    {
                        //func.Cmd(res, messageEvent);
                        RunCommand(res, messageEvent);
                    }
                }
                catch (Exception e)
                {
                    _logger.LogCritical(e, "Critical Exception while running command: {Message}", messageEvent.Message);

                    messageEvent.RespondError("Error");
                }
            }
        }
Example #14
0
        async Task PlaceRules(ParseResult result, IMessageCreatedEvent messageEvent)
        {
            var guild = messageEvent.Guild !;

            messageEvent.Db.Attach(guild);
            await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync();

            var text = RulesText(guild);

            var embed = DiscordBot.Instance.BaseEmbed();

            embed.Title       = "Server Rules";
            embed.Description = text;
            embed.Author      = null;

            var message = await messageEvent.Respond(embed.Build());

            guild.RulesMessageId = message.Id.ToString();
            guild.RulesChannelId = message.ChannelId.ToString();

            await messageEvent.Db.SaveChangesAsync();
        }
Example #15
0
 private int Run(ParseResult result, IMessageCreatedEvent discordmessageevent)
 {
     discordmessageevent.Respond("pong!");
     return(0);
 }
 public CommandExecutionContext(IMessageCreatedEvent @event)
 {
     Event = @event;
     Db    = @event.Db;
 }
Example #17
0
        private async Task AddQuote(ParseResult result, IMessageCreatedEvent context)
        {
            var db = context.Db;

            User creator = context.Author;
            User?source  = null;

            DateTime date      = context.Time;
            DateTime eventTime = context.Time;

            string text = "";

            if (context.HasRefMessage)
            {
                text      = context.RefMessageText !;
                source    = context.RefMessageAuthor ?? null;
                eventTime = context.RefMessageTime?.Date ?? context.Time;
            }
            else
            {
                if (result.Args.ContainsKey("text"))
                {
                    text = result.GetStringArg("text");
                }

                if (string.IsNullOrWhiteSpace(text))
                {
                    await context.RespondError("Dind't find text to quote");

                    return;
                }


                if (result.Args.ContainsKey("source"))
                {
                    var user = (DiscordUser)result.Args["source"];
                    source = db.GetOrCreateUserFor(user);
                }
            }


            await db.Entry(context.Guild).Collection(d => d !.Quotes).LoadAsync();

            context.Guild !.Quotes.Sort((a, b) => a.number - b.number);
            var last     = context.Guild.Quotes.LastOrDefault();
            var next_num = last?.number + 1 ?? 0;

            var entity = new Quote(creator.ID, source?.ID, context.Guild.ID, date, eventTime, text, null, next_num);

            db.Add(entity);

            var embed = DiscordBot.Instance.BaseEmbed();

            embed.Color       = new Optional <DiscordColor>(new DiscordColor(0, 255, 0));
            embed.Title       = $"Added new quote number {entity.number}:";
            embed.Description = $"> {text}";
            embed.Footer      = new DiscordEmbedBuilder.EmbedFooter()
            {
                Text = $"by {entity.SourceName}"
            };

            await context.Respond(embed.Build());

            await db.SaveChangesAsync();
        }
Example #18
0
 public abstract Task <bool> CheckCondition(CommandFunction func, IMessageCreatedEvent context, ICommandConditionProvider provider);
Example #19
0
 public void ProcessEvent(IMessageCreatedEvent messageCreatedEvent)
 {
     //_logger.LogInformation(messageCreatedEvent.Message);
     ProcessMessage(messageCreatedEvent);
 }