From af13ccddfc6cd4e4f432f7abec6cb2b21d5ceaee Mon Sep 17 00:00:00 2001 From: AraHaan <15173749+AraHaan@users.noreply.github.com> Date: Tue, 26 May 2020 18:55:52 -0400 Subject: [PATCH 1/4] Attempt to auto jail mention bombers. I have limited it to 5 for now in case of valid scenarios where 3 or 4 people are mentioned for a valid reason. --- futaba/cogs/moderation/core.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/futaba/cogs/moderation/core.py b/futaba/cogs/moderation/core.py index d08c81b5..657c1c27 100644 --- a/futaba/cogs/moderation/core.py +++ b/futaba/cogs/moderation/core.py @@ -46,8 +46,8 @@ def setup(self): pass @staticmethod - def build_reason(ctx, action, minutes, reason, past=False): - full_reason = StringBuilder(f"{action} by {user_discrim(ctx.author)}") + def build_reason(message, action, minutes, reason, past=False): + full_reason = StringBuilder(f"{action} by {user_discrim(message.author)}") if minutes: full_reason.write( f" {'for' if past else 'in'} {minutes} minute{plural(minutes)}" @@ -56,7 +56,7 @@ def build_reason(ctx, action, minutes, reason, past=False): full_reason.write(f" with reason: {reason}") return str(full_reason) - async def remove_roles(self, ctx, member, minutes, action, reason): + async def remove_roles(self, message, member, minutes, action, reason): assert minutes logger.info( @@ -71,7 +71,7 @@ async def remove_roles(self, ctx, member, minutes, action, reason): task = PunishTask( self.bot, None, - ctx.author, + message.author, timestamp, None, member=member, @@ -169,24 +169,27 @@ async def unmute( else: await self.bot.punish.unjail(ctx.guild, member, reason) - async def perform_jail(self, ctx, member, minutes, reason): - roles = self.bot.sql.settings.get_special_roles(ctx.guild) + async def perform_jail_internal(self, message, member, minutes, reason): + roles = self.bot.sql.settings.get_special_roles(message.guild) if roles.jail is None: raise CommandFailed(content="No configured jail role") - if member.top_role >= ctx.me.top_role: + if member.top_role >= self.bot.user.top_role: raise ManualCheckFailure("I don't have permission to jail this user") minutes = max(minutes, 0) - reason = self.build_reason(ctx, "Jailed", minutes, reason) + reason = self.build_reason(message, "Jailed", minutes, reason) - await self.bot.punish.jail(ctx.guild, member, reason) + await self.bot.punish.jail(message.guild, member, reason) # If a delayed event, schedule a Navi task if minutes: await self.remove_roles( - ctx, member, minutes, PunishAction.RELIEVE_JAIL, reason + message, member, minutes, PunishAction.RELIEVE_JAIL, reason ) + + async def perform_jail(self, ctx, member, minutes, reason): + await self.perform_jail_internal(self, ctx.message, member, minutes, reason) @commands.command(name="jail", aliases=["dunce"]) @commands.guild_only() @@ -201,6 +204,15 @@ async def jail(self, ctx, member: MemberConv, *, reason: str = None): await self.perform_jail(ctx, member, 0, reason) + async def on_message(self, message): + """ + Bot Event. + :param message: Messages. + :return: Nothing. + """ + if len(message.mentions) > 5: + await self.perform_jail_internal(message, message.author, 0, "Mention Bombing.") + @commands.command(name="djail", aliases=["ddunce", "timejail", "timedunce"]) @commands.guild_only() @permissions.check_perm("manage_roles") From dacceef2233e1e9abea2b843fc3643b2b5a4f037 Mon Sep 17 00:00:00 2001 From: AraHaan Date: Tue, 26 May 2020 19:36:58 -0400 Subject: [PATCH 2/4] Address feedback, and fix black. --- futaba/cogs/moderation/core.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/futaba/cogs/moderation/core.py b/futaba/cogs/moderation/core.py index 657c1c27..a439861a 100644 --- a/futaba/cogs/moderation/core.py +++ b/futaba/cogs/moderation/core.py @@ -46,7 +46,7 @@ def setup(self): pass @staticmethod - def build_reason(message, action, minutes, reason, past=False): + def build_reason_internal(message, action, minutes, reason, past=False): full_reason = StringBuilder(f"{action} by {user_discrim(message.author)}") if minutes: full_reason.write( @@ -56,7 +56,11 @@ def build_reason(message, action, minutes, reason, past=False): full_reason.write(f" with reason: {reason}") return str(full_reason) - async def remove_roles(self, message, member, minutes, action, reason): + @staticmethod + def build_reason(ctx, action, minutes, reason, past=False): + self.build_reason_internal(ctx.message, action, minutes, reason, past) + + async def remove_roles_internal(self, message, member, minutes, action, reason): assert minutes logger.info( @@ -80,6 +84,9 @@ async def remove_roles(self, message, member, minutes, action, reason): ) self.bot.add_tasks(task) + async def remove_roles(self, ctx, member, minutes, action, reason): + self.remove_roles_internal(ctx.message, member, minutes, action, reason) + @commands.command(name="nick", aliases=["nickname", "renick"]) @commands.guild_only() @permissions.check_perm("manage_nicknames") @@ -178,16 +185,16 @@ async def perform_jail_internal(self, message, member, minutes, reason): raise ManualCheckFailure("I don't have permission to jail this user") minutes = max(minutes, 0) - reason = self.build_reason(message, "Jailed", minutes, reason) + reason = self.build_reason_internal(message, "Jailed", minutes, reason) await self.bot.punish.jail(message.guild, member, reason) # If a delayed event, schedule a Navi task if minutes: - await self.remove_roles( + await self.remove_roles_internal( message, member, minutes, PunishAction.RELIEVE_JAIL, reason ) - + async def perform_jail(self, ctx, member, minutes, reason): await self.perform_jail_internal(self, ctx.message, member, minutes, reason) @@ -211,7 +218,9 @@ async def on_message(self, message): :return: Nothing. """ if len(message.mentions) > 5: - await self.perform_jail_internal(message, message.author, 0, "Mention Bombing.") + await self.perform_jail_internal( + message, message.author, 0, "Mention Bombing." + ) @commands.command(name="djail", aliases=["ddunce", "timejail", "timedunce"]) @commands.guild_only() From 0a704d724a0e06117164f6996fed63492fb07600 Mon Sep 17 00:00:00 2001 From: AraHaan Date: Tue, 26 May 2020 19:52:45 -0400 Subject: [PATCH 3/4] Fixed pylint. --- futaba/cogs/moderation/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/futaba/cogs/moderation/core.py b/futaba/cogs/moderation/core.py index a439861a..72812edf 100644 --- a/futaba/cogs/moderation/core.py +++ b/futaba/cogs/moderation/core.py @@ -58,7 +58,7 @@ def build_reason_internal(message, action, minutes, reason, past=False): @staticmethod def build_reason(ctx, action, minutes, reason, past=False): - self.build_reason_internal(ctx.message, action, minutes, reason, past) + Moderation.build_reason_internal(ctx.message, action, minutes, reason, past) async def remove_roles_internal(self, message, member, minutes, action, reason): assert minutes @@ -196,7 +196,7 @@ async def perform_jail_internal(self, message, member, minutes, reason): ) async def perform_jail(self, ctx, member, minutes, reason): - await self.perform_jail_internal(self, ctx.message, member, minutes, reason) + await self.perform_jail_internal(ctx.message, member, minutes, reason) @commands.command(name="jail", aliases=["dunce"]) @commands.guild_only() From e95d72ede2f5e99a837aa85decd5f1c60c761dbe Mon Sep 17 00:00:00 2001 From: AraHaan <15173749+AraHaan@users.noreply.github.com> Date: Wed, 27 May 2020 18:47:21 -0400 Subject: [PATCH 4/4] Address a few issues. --- futaba/cogs/moderation/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/futaba/cogs/moderation/core.py b/futaba/cogs/moderation/core.py index 72812edf..a7c2fa64 100644 --- a/futaba/cogs/moderation/core.py +++ b/futaba/cogs/moderation/core.py @@ -58,7 +58,7 @@ def build_reason_internal(message, action, minutes, reason, past=False): @staticmethod def build_reason(ctx, action, minutes, reason, past=False): - Moderation.build_reason_internal(ctx.message, action, minutes, reason, past) + return Moderation.build_reason_internal(ctx.message, action, minutes, reason, past) async def remove_roles_internal(self, message, member, minutes, action, reason): assert minutes @@ -85,7 +85,7 @@ async def remove_roles_internal(self, message, member, minutes, action, reason): self.bot.add_tasks(task) async def remove_roles(self, ctx, member, minutes, action, reason): - self.remove_roles_internal(ctx.message, member, minutes, action, reason) + await self.remove_roles_internal(ctx.message, member, minutes, action, reason) @commands.command(name="nick", aliases=["nickname", "renick"]) @commands.guild_only()