diff --git a/futaba/cogs/moderation/core.py b/futaba/cogs/moderation/core.py index d08c81b5..a7c2fa64 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_internal(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,11 @@ 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): + @staticmethod + def build_reason(ctx, action, minutes, reason, past=False): + return Moderation.build_reason_internal(ctx.message, action, minutes, reason, past) + + async def remove_roles_internal(self, message, member, minutes, action, reason): assert minutes logger.info( @@ -71,7 +75,7 @@ async def remove_roles(self, ctx, member, minutes, action, reason): task = PunishTask( self.bot, None, - ctx.author, + message.author, timestamp, None, member=member, @@ -80,6 +84,9 @@ async def remove_roles(self, ctx, member, minutes, action, reason): ) self.bot.add_tasks(task) + async def remove_roles(self, ctx, 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() @permissions.check_perm("manage_nicknames") @@ -169,25 +176,28 @@ 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_internal(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 + 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(ctx.message, member, minutes, reason) + @commands.command(name="jail", aliases=["dunce"]) @commands.guild_only() @permissions.check_perm("manage_roles") @@ -201,6 +211,17 @@ 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")