Exemplo n.º 1
0
        private async Task ExecuteAction(MessageContext context, ModerationPunishment action, string reason, SocketGuildUser user = null)
        {
            user ??= context.socketServerUser ?? throw new ArgumentNullException($"Both {nameof(user)} and {nameof(context)}.{nameof(MessageContext.socketServerUser)} are null.");

            var embedBuilder = MopBot.GetEmbedBuilder(user.Guild)
                               .WithAuthor(user)
                               .WithDescription($"**Reason:** `{reason}`");

            bool RequirePermission(DiscordPermission discordPermission)
            {
                if (!context.server.CurrentUser.HasChannelPermission(context.socketServerChannel, DiscordPermission.BanMembers))
                {
                    action = ModerationPunishment.Announce;

                    embedBuilder.Title = $"{embedBuilder.Title}\r\n**Attempted to execute action '{action}', but the following permission was missing: `{DiscordPermission.BanMembers}`.";

                    return(false);
                }

                return(true);
            }

            switch (action)
            {
            case ModerationPunishment.Kick:
                if (RequirePermission(DiscordPermission.KickMembers))
                {
                    await user.KickAsync(reason : reason);

                    embedBuilder.Title = "User auto-kicked";
                }

                break;

            case ModerationPunishment.Ban:
                if (RequirePermission(DiscordPermission.KickMembers))
                {
                    await user.BanAsync(reason : reason);

                    embedBuilder.Title = "User auto-banned";
                }

                break;
            }

            if (action == ModerationPunishment.Announce)
            {
                embedBuilder.Title = "User violation detected";
            }

            var data = context.server.GetMemory().GetData <AutoModerationSystem, AutoModerationServerData>();

            await context.socketTextChannel.SendMessageAsync(data.announcementPrefix, embed : embedBuilder.Build());
        }
Exemplo n.º 2
0
        public async Task MentionSpamSetupCommand(ModerationPunishment moderationPunishment, uint minPingsForBan, byte pingCooldownInSeconds)
        {
            if (minPingsForBan < 3)
            {
                throw new BotError("For safety reasons, minimal amount of pings for a punishment must be at least `3`.");
            }

            if (pingCooldownInSeconds <= 0)
            {
                throw new BotError("Ping cooldown can't be `0` seconds.");
            }

            var data = Context.server.GetMemory().GetData <AutoModerationSystem, AutoModerationServerData>();

            data.mentionSpamPunishment = moderationPunishment;
            data.minMentionsForAction  = minPingsForBan;
            data.mentionCooldown       = pingCooldownInSeconds;
        }
Exemplo n.º 3
0
        public async Task MentionSpamSetupCommand(ModerationPunishment moderationAction)
        {
            var data = Context.server.GetMemory().GetData <AutoModerationSystem, AutoModerationServerData>();

            data.mentionSpamPunishment = moderationAction;
        }