diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/exts/moderation/modlog.py | 211 | 
1 files changed, 104 insertions, 107 deletions
| diff --git a/bot/exts/moderation/modlog.py b/bot/exts/moderation/modlog.py index b349f4d5d..3c256396a 100644 --- a/bot/exts/moderation/modlog.py +++ b/bot/exts/moderation/modlog.py @@ -8,7 +8,7 @@ from dateutil.relativedelta import relativedelta  from deepdiff import DeepDiff  from discord import Colour, Message, Thread  from discord.abc import GuildChannel -from discord.ext.commands import Cog, Context +from discord.ext.commands import Cog  from discord.utils import escape_markdown, format_dt, snowflake_time  from bot.bot import Bot @@ -16,6 +16,7 @@ from bot.constants import Channels, Colours, Emojis, Event, Guild as GuildConsta  from bot.log import get_logger  from bot.utils import time  from bot.utils.messages import format_user, upload_log +from bot.utils.modlog import send_log_message  log = get_logger(__name__) @@ -47,63 +48,6 @@ class ModLog(Cog, name="ModLog"):              if item not in self._ignored[event]:                  self._ignored[event].append(item) -    async def send_log_message( -        self, -        icon_url: str | None, -        colour: discord.Colour | int, -        title: str | None, -        text: str, -        thumbnail: str | discord.Asset | None = None, -        channel_id: int = Channels.mod_log, -        ping_everyone: bool = False, -        files: list[discord.File] | None = None, -        content: str | None = None, -        additional_embeds: list[discord.Embed] | None = None, -        timestamp_override: datetime | None = None, -        footer: str | None = None, -    ) -> Context: -        """Generate log embed and send to logging channel.""" -        await self.bot.wait_until_guild_available() -        # Truncate string directly here to avoid removing newlines -        embed = discord.Embed( -            description=text[:4093] + "..." if len(text) > 4096 else text -        ) - -        if title and icon_url: -            embed.set_author(name=title, icon_url=icon_url) - -        embed.colour = colour -        embed.timestamp = timestamp_override or datetime.now(tz=UTC) - -        if footer: -            embed.set_footer(text=footer) - -        if thumbnail: -            embed.set_thumbnail(url=thumbnail) - -        if ping_everyone: -            if content: -                content = f"<@&{Roles.moderators}> {content}" -            else: -                content = f"<@&{Roles.moderators}>" - -        # Truncate content to 2000 characters and append an ellipsis. -        if content and len(content) > 2000: -            content = content[:2000 - 3] + "..." - -        channel = self.bot.get_channel(channel_id) -        log_message = await channel.send( -            content=content, -            embed=embed, -            files=files -        ) - -        if additional_embeds: -            for additional_embed in additional_embeds: -                await channel.send(embed=additional_embed) - -        return await self.bot.get_context(log_message)  # Optionally return for use with antispam -      @Cog.listener()      async def on_guild_channel_create(self, channel: GUILD_CHANNEL) -> None:          """Log channel create event to mod log.""" @@ -128,7 +72,7 @@ class ModLog(Cog, name="ModLog"):              else:                  message = f"{channel.name} (`{channel.id}`)" -        await self.send_log_message(Icons.hash_green, Colours.soft_green, title, message) +        await send_log_message(self.bot, Icons.hash_green, Colours.soft_green, title, message)      @Cog.listener()      async def on_guild_channel_delete(self, channel: GUILD_CHANNEL) -> None: @@ -148,9 +92,12 @@ class ModLog(Cog, name="ModLog"):          else:              message = f"{channel.name} (`{channel.id}`)" -        await self.send_log_message( -            Icons.hash_red, Colours.soft_red, -            title, message +        await send_log_message( +            self.bot, +            Icons.hash_red, +            Colours.soft_red, +            title, +            message          )      @Cog.listener() @@ -211,9 +158,12 @@ class ModLog(Cog, name="ModLog"):          else:              message = f"**#{after.name}** (`{after.id}`)\n{message}" -        await self.send_log_message( -            Icons.hash_blurple, Colour.og_blurple(), -            "Channel updated", message +        await send_log_message( +            self.bot, +            Icons.hash_blurple, +            Colour.og_blurple(), +            "Channel updated", +            message          )      @Cog.listener() @@ -222,9 +172,12 @@ class ModLog(Cog, name="ModLog"):          if role.guild.id != GuildConstant.id:              return -        await self.send_log_message( -            Icons.crown_green, Colours.soft_green, -            "Role created", f"`{role.id}`" +        await send_log_message( +            self.bot, +            Icons.crown_green, +            Colours.soft_green, +            "Role created", +            f"`{role.id}`"          )      @Cog.listener() @@ -233,9 +186,12 @@ class ModLog(Cog, name="ModLog"):          if role.guild.id != GuildConstant.id:              return -        await self.send_log_message( -            Icons.crown_red, Colours.soft_red, -            "Role removed", f"{role.name} (`{role.id}`)" +        await send_log_message( +            self.bot, +            Icons.crown_red, +            Colours.soft_red, +            "Role removed", +            f"{role.name} (`{role.id}`)"          )      @Cog.listener() @@ -286,9 +242,12 @@ class ModLog(Cog, name="ModLog"):          message = f"**{after.name}** (`{after.id}`)\n{message}" -        await self.send_log_message( -            Icons.crown_blurple, Colour.og_blurple(), -            "Role updated", message +        await send_log_message( +            self.bot, +            Icons.crown_blurple, +            Colour.og_blurple(), +            "Role updated", +            message          )      @Cog.listener() @@ -336,9 +295,12 @@ class ModLog(Cog, name="ModLog"):          message = f"**{after.name}** (`{after.id}`)\n{message}" -        await self.send_log_message( -            Icons.guild_update, Colour.og_blurple(), -            "Guild updated", message, +        await send_log_message( +            self.bot, +            Icons.guild_update, +            Colour.og_blurple(), +            "Guild updated", +            message,              thumbnail=after.icon.with_static_format("png")          ) @@ -352,9 +314,12 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.member_ban].remove(member.id)              return -        await self.send_log_message( -            Icons.user_ban, Colours.soft_red, -            "User banned", format_user(member), +        await send_log_message( +            self.bot, +            Icons.user_ban, +            Colours.soft_red, +            "User banned", +            format_user(member),              thumbnail=member.display_avatar.url,              channel_id=Channels.user_log          ) @@ -373,9 +338,12 @@ class ModLog(Cog, name="ModLog"):          if difference.days < 1 and difference.months < 1 and difference.years < 1:  # New user account!              message = f"{Emojis.new} {message}" -        await self.send_log_message( -            Icons.sign_in, Colours.soft_green, -            "User joined", message, +        await send_log_message( +            self.bot, +            Icons.sign_in, +            Colours.soft_green, +            "User joined", +            message,              thumbnail=member.display_avatar.url,              channel_id=Channels.user_log          ) @@ -390,9 +358,12 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.member_remove].remove(member.id)              return -        await self.send_log_message( -            Icons.sign_out, Colours.soft_red, -            "User left", format_user(member), +        await send_log_message( +            self.bot, +            Icons.sign_out, +            Colours.soft_red, +            "User left", +            format_user(member),              thumbnail=member.display_avatar.url,              channel_id=Channels.user_log          ) @@ -407,9 +378,12 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.member_unban].remove(member.id)              return -        await self.send_log_message( -            Icons.user_unban, Colour.og_blurple(), -            "User unbanned", format_user(member), +        await send_log_message( +            self.bot, +            Icons.user_unban, +            Colour.og_blurple(), +            "User unbanned", +            format_user(member),              thumbnail=member.display_avatar.url,              channel_id=Channels.mod_log          ) @@ -471,7 +445,8 @@ class ModLog(Cog, name="ModLog"):          message = f"{format_user(after)}\n{message}" -        await self.send_log_message( +        await send_log_message( +            self.bot,              icon_url=Icons.user_update,              colour=Colour.og_blurple(),              title="Member updated", @@ -565,8 +540,10 @@ class ModLog(Cog, name="ModLog"):          response += f"{content}" -        await self.send_log_message( -            Icons.message_delete, Colours.soft_red, +        await send_log_message( +            self.bot, +            Icons.message_delete, +            Colours.soft_red,              "Message deleted",              response,              channel_id=Channels.message_log @@ -606,8 +583,10 @@ class ModLog(Cog, name="ModLog"):                  "This message was not cached, so the message content cannot be displayed."              ) -        await self.send_log_message( -            Icons.message_delete, Colours.soft_red, +        await send_log_message( +            self.bot, +            Icons.message_delete, +            Colours.soft_red,              "Message deleted",              response,              channel_id=Channels.message_log @@ -687,9 +666,15 @@ class ModLog(Cog, name="ModLog"):              timestamp = msg_before.created_at              footer = None -        await self.send_log_message( -            Icons.message_edit, Colour.og_blurple(), "Message edited", response, -            channel_id=Channels.message_log, timestamp_override=timestamp, footer=footer +        await send_log_message( +            self.bot, +            Icons.message_edit, +            Colour.og_blurple(), +            "Message edited", +            response, +            channel_id=Channels.message_log, +            timestamp_override=timestamp, +            footer=footer          )      @Cog.listener() @@ -734,14 +719,22 @@ class ModLog(Cog, name="ModLog"):              f"{message.clean_content}"          ) -        await self.send_log_message( -            Icons.message_edit, Colour.og_blurple(), "Message edited (Before)", -            before_response, channel_id=Channels.message_log +        await send_log_message( +            self.bot, +            Icons.message_edit, +            Colour.og_blurple(), +            "Message edited (Before)", +            before_response, +            channel_id=Channels.message_log          ) -        await self.send_log_message( -            Icons.message_edit, Colour.og_blurple(), "Message edited (After)", -            after_response, channel_id=Channels.message_log +        await send_log_message( +            self.bot, +            Icons.message_edit, +            Colour.og_blurple(), +            "Message edited (After)", +            after_response, +            channel_id=Channels.message_log          )      @Cog.listener() @@ -752,7 +745,8 @@ class ModLog(Cog, name="ModLog"):              return          if before.name != after.name: -            await self.send_log_message( +            await send_log_message( +                self.bot,                  Icons.hash_blurple,                  Colour.og_blurple(),                  "Thread name edited", @@ -774,7 +768,8 @@ class ModLog(Cog, name="ModLog"):          else:              return -        await self.send_log_message( +        await send_log_message( +            self.bot,              icon,              colour,              f"Thread {action}", @@ -792,7 +787,8 @@ class ModLog(Cog, name="ModLog"):              log.trace("Ignoring deletion of thread %s (%d)", thread.mention, thread.id)              return -        await self.send_log_message( +        await send_log_message( +            self.bot,              Icons.hash_red,              Colours.soft_red,              "Thread deleted", @@ -868,7 +864,8 @@ class ModLog(Cog, name="ModLog"):          message = "\n".join(f"{Emojis.bullet} {item}" for item in sorted(changes))          message = f"{format_user(member)}\n{message}" -        await self.send_log_message( +        await send_log_message( +            self.bot,              icon_url=icon,              colour=colour,              title="Voice state updated", | 
