From 37bae2eeb3ad94d900eb5d802553f54b07bc70a3 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Sat, 6 Jul 2024 13:10:09 -0400 Subject: [PATCH] fix(aurora): add a softban type --- aurora/models/moderation_types.py | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/aurora/models/moderation_types.py b/aurora/models/moderation_types.py index db36dd0..c895ff0 100644 --- a/aurora/models/moderation_types.py +++ b/aurora/models/moderation_types.py @@ -245,6 +245,63 @@ class Tempban(Ban): await send_evidenceformat(ctx, moderation.id) return cls +@type_registry.register(key="softban") +class Softban(Type): + key="softban" + string="softban" + verb="softbanned" + + @classmethod + async def handler(cls, ctx: commands.Context, target: Member | User, silent: bool, reason: str = None, delete_messages: app_commands.Choice | None = None) -> 'Softban': + """Softban a user.""" + bot = ctx.bot + try: + await ctx.guild.fetch_ban(target) + await ctx.send(content=error(f"{target.mention} is already {Ban.verb}!"), ephemeral=True) + except NotFound: + pass + + if delete_messages is None: + delete_messages_seconds = 0 + else: + delete_messages_seconds = delete_messages.value + + response_message = await ctx.send(f"{target.mention} has been {cls.verb}!\n{bold('Reason:')} {inline(reason)}") + + if silent is False: + try: + embed = await message_factory( + bot, + await bot.get_embed_color(ctx.channel), + ctx.guild, + reason, + cls(), + ctx.author, + None, + response_message + ) + await target.send(embed=embed, file=get_icon(bot)) + except HTTPException: + pass + + await ctx.guild.ban(target, reason=f"{str.title(cls.verb)} by {ctx.author.id} for: {reason}", delete_message_seconds=delete_messages_seconds) + await ctx.guild.unban(target, reason=f"Softban by {ctx.author.id} for: {reason}") + moderation = await Moderation.log( + bot, + ctx.guild.id, + ctx.author.id, + cls(), + 'user', + target.id, + None, + None, + reason + ) + await response_message.edit(content=f"{target.mention} has been {cls.verb}! (Case {inline(f'#{moderation.id}')})\n{bold('Reason:')} {inline(reason)}") + await log(ctx, moderation.id) + await send_evidenceformat(ctx, moderation.id) + return cls + @type_registry.register(key="unban") class Unban(Type): key="unban"