From 1a26d82c363c18ca7157a984139319594292bdfd Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 02:55:52 -0400 Subject: [PATCH 01/12] feat(logger): added the cog --- logger/__init__.py | 7 +++ logger/config.py | 106 +++++++++++++++++++++++++++++++++++++++++++++ logger/info.json | 17 ++++++++ logger/logger.py | 48 ++++++++++++++++++++ logger/menu.py | 30 +++++++++++++ 5 files changed, 208 insertions(+) create mode 100644 logger/__init__.py create mode 100644 logger/config.py create mode 100644 logger/info.json create mode 100644 logger/logger.py create mode 100644 logger/menu.py diff --git a/logger/__init__.py b/logger/__init__.py new file mode 100644 index 0000000..df5efcd --- /dev/null +++ b/logger/__init__.py @@ -0,0 +1,7 @@ +from redbot.core.bot import Red + +from .logger import Logger + + +async def setup(bot: Red) -> None: + await bot.add_cog(Logger(bot)) diff --git a/logger/config.py b/logger/config.py new file mode 100644 index 0000000..470cf99 --- /dev/null +++ b/logger/config.py @@ -0,0 +1,106 @@ +from redbot.core import Config + +config: Config = Config.get_conf(None, identifier=34236413658947743, cog_name="Logger", force_registration=True) + +def register_config(): + config.register_guild( + guild_update = False, + guild_update_channel = None, + channel_update = False, + channel_update_channel = None, + channel_delete = False, + channel_delete_channel = None, + overwrite_create = False, + overwrite_create_channel = None, + overwrite_update = False, + overwrite_update_channel = None, + overwrite_delete = False, + overwrite_delete_channel = None, + kick = False, + kick_channel = None, + member_prune = False, + member_prune_channel = None, + ban = False, + ban_channel = None, + unban = False, + unban_channel = None, + member_update = False, + member_update_channel = None, + member_role_update = False, + member_role_update_channel = None, + member_move = False, + member_move_channel = None, + member_disconnect = False, + member_disconnect_channel = None, + bot_add = False, + bot_add_channel = None, + role_create = False, + role_create_channel = None, + role_update = False, + role_update_channel = None, + role_delete = False, + role_delete_channel = None, + invite_create = False, + invite_create_channel = None, + invite_delete = False, + invite_delete_channel = None, + webhook_create = False, + webhook_create_channel = None, + webhook_update = False, + webhook_update_channel = None, + webhook_delete = False, + webhook_delete_channel = None, + emoji_create = False, + emoji_create_channel = None, + emoji_update = False, + emoji_update_channel = None, + emoji_delete = False, + emoji_delete_channel = None, + message_delete = False, + message_delete_channel = 967981200549494804, + message_edit = False, + message_edit_channel = 967981200549494804, + message_pin = False, + message_pin_channel = None, + message_unpin = False, + message_unpin_channel = None, + message_ignored_channels = [], + integration_create = False, + integration_create_channel = None, + integration_update = False, + integration_update_channel = None, + integration_delete = False, + integration_delete_channel = None, + stage_instance_create = False, + stage_instance_create_channel = None, + stage_instance_update = False, + stage_instance_update_channel = None, + stage_instance_delete = False, + stage_instance_delete_channel = None, + sticker_create = False, + sticker_create_channel = None, + sticker_update = False, + sticker_update_channel = None, + sticker_delete = False, + sticker_delete_channel = None, + scheduled_event_create = False, + scheduled_event_create_channel = None, + scheduled_event_update = False, + scheduled_event_update_channel = None, + scheduled_event_delete = False, + scheduled_event_delete_channel = None, + thread_create = False, + thread_create_channel = None, + thread_update = False, + thread_update_channel = None, + thread_delete = False, + thread_delete_channel = None, + app_command_permission_update = False, + app_command_permission_update_channel = None, + automod_rule_create = False, + automod_rule_create_channel = None, + automod_rule_update = False, + automod_rule_update_channel = None, + automod_rule_delete = False, + automod_rule_delete_channel = None, + ) diff --git a/logger/info.json b/logger/info.json new file mode 100644 index 0000000..42b8064 --- /dev/null +++ b/logger/info.json @@ -0,0 +1,17 @@ +{ + "author" : ["SeaswimmerTheFsh (seasw.)"], + "install_msg" : "Thank you for installing Logger!", + "name" : "Logger", + "short" : "Log events configurably.", + "description" : "Logger logs events to a channel of your choice. You can configure which events to log and which channel to log them to.", + "end_user_data_statement" : "This cog does not store end user data.", + "hidden": false, + "disabled": false, + "min_bot_version": "3.5.0", + "min_python_version": [3, 10, 0], + "tags": [ + "utility", + "moderation", + "logging" + ] + } diff --git a/logger/logger.py b/logger/logger.py new file mode 100644 index 0000000..a4be99c --- /dev/null +++ b/logger/logger.py @@ -0,0 +1,48 @@ +import time + +import discord +from redbot.core import commands +from redbot.core.bot import Red +from redbot.core.utils.chat_formatting import bold + +from .config import config, register_config + + +class Logger(commands.Cog): + def __init__(self, bot: Red) -> None: + self.bot: Red = bot + register_config() + + @commands.Cog.listener() + async def on_raw_message_delete(self, payload: discord.RawMessageDeleteEvent) -> None: + if not payload.guild_id: + return + + if self.bot.cog_disabled_in_guild(self, payload.guild_id): + return + + #if payload.channel_id in await config.guild(payload.guild_id).message_ignored_channels(): + #return + + if payload.cached_message: + if payload.cached_message.author.bot: + return + + if len(payload.cached_message.content) > 3898: + content = payload.cached_message.content[:3900] + "..." + else: + content = payload.cached_message.content + + author = payload.cached_message.author + + c = await config.guild(payload.guild_id).message_delete_channel() + if c: + channel = self.bot.get_channel(c) + if channel: + embed = discord.Embed(color=discord.Color.from_str(value="#ff470f")) + embed.set_author(name=f"{author.display_name} - Deleted Message", icon_url=author.display_avatar.url) + embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}") + content + embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}") + embed.timestamp = time.time() + + await channel.send(embed=embed) diff --git a/logger/menu.py b/logger/menu.py new file mode 100644 index 0000000..b55a0eb --- /dev/null +++ b/logger/menu.py @@ -0,0 +1,30 @@ + +from discord import Embed, Message, ui +from redbot.core import commands + +from .config import config + + +async def get_config(ctx: commands.Context) -> dict: + return dict(sorted(await config.guild(ctx.guild).all().items())) + +async def get_embed(ctx: commands.Context, type: str = None): + conf = await get_config(ctx) + if not type or type not in conf.keys(): + embed = Embed( + title="Logger Configuration - Message Delete", + description="Please select a configuration option below.", + color=await ctx.embed_color(), + ) + + +class ConfigMenu(ui.View): + def __init__(self, ctx: commands.Context, message: Message, type: str = None, timeout: int = None): + super().__init__() + self.ctx = ctx + self.message = message + self.type = type + self.timeout = timeout + + async def on_timeout(self): + await self.message.edit(view=None) From 24703bb32fa9e7582a596afe4f40cb88ca722f34 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:01:04 -0400 Subject: [PATCH 02/12] fix(logger): awaited a coroutine --- logger/logger.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/logger/logger.py b/logger/logger.py index a4be99c..e990140 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -18,11 +18,11 @@ class Logger(commands.Cog): if not payload.guild_id: return - if self.bot.cog_disabled_in_guild(self, payload.guild_id): + if await self.bot.cog_disabled_in_guild(self, payload.guild_id): return - #if payload.channel_id in await config.guild(payload.guild_id).message_ignored_channels(): - #return + if payload.channel_id in await config.guild(payload.guild_id).message_ignored_channels(): + return if payload.cached_message: if payload.cached_message.author.bot: From 6fbd2531a867f75bc9ac3c1f7fd286be5feb0062 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:03:04 -0400 Subject: [PATCH 03/12] fix(logger): fixed some stuff --- logger/logger.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/logger/logger.py b/logger/logger.py index e990140..ce580a2 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -15,13 +15,17 @@ class Logger(commands.Cog): @commands.Cog.listener() async def on_raw_message_delete(self, payload: discord.RawMessageDeleteEvent) -> None: - if not payload.guild_id: + if payload.guild_id: + guild = self.bot.get_guild(payload.guild_id) + if guild is None: + return + else: return - if await self.bot.cog_disabled_in_guild(self, payload.guild_id): + if await self.bot.cog_disabled_in_guild(self, guild): return - if payload.channel_id in await config.guild(payload.guild_id).message_ignored_channels(): + if payload.channel_id in await config.guild(guild).message_ignored_channels(): return if payload.cached_message: @@ -35,7 +39,7 @@ class Logger(commands.Cog): author = payload.cached_message.author - c = await config.guild(payload.guild_id).message_delete_channel() + c = await config.guild(guild).message_delete_channel() if c: channel = self.bot.get_channel(c) if channel: From 0f82ddcf7b8d55cf8d5653dceb89fc236e35dcd9 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:04:40 -0400 Subject: [PATCH 04/12] fix(logger): fixed embed timestamp --- logger/logger.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/logger/logger.py b/logger/logger.py index ce580a2..9aaaf3d 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -1,4 +1,4 @@ -import time +from datetime import UTC, datetime import discord from redbot.core import commands @@ -43,10 +43,9 @@ class Logger(commands.Cog): if c: channel = self.bot.get_channel(c) if channel: - embed = discord.Embed(color=discord.Color.from_str(value="#ff470f")) + embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) embed.set_author(name=f"{author.display_name} - Deleted Message", icon_url=author.display_avatar.url) embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}") + content embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}") - embed.timestamp = time.time() await channel.send(embed=embed) From 0f1a9fb66c219b135c7e93f734747301745cf55f Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:05:55 -0400 Subject: [PATCH 05/12] fix(logger): added a missing newline --- logger/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logger/logger.py b/logger/logger.py index 9aaaf3d..f4ea0a4 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -45,7 +45,7 @@ class Logger(commands.Cog): if channel: embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) embed.set_author(name=f"{author.display_name} - Deleted Message", icon_url=author.display_avatar.url) - embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}") + content + embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n") + content embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}") await channel.send(embed=embed) From 7520ee783becb90723faf140cb7f935dc71855f4 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:07:12 -0400 Subject: [PATCH 06/12] fix(logger): hopefully fixed broken formatting --- logger/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logger/logger.py b/logger/logger.py index f4ea0a4..33b0038 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -45,7 +45,7 @@ class Logger(commands.Cog): if channel: embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) embed.set_author(name=f"{author.display_name} - Deleted Message", icon_url=author.display_avatar.url) - embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n") + content + embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention} \n") + content embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}") await channel.send(embed=embed) From ce502d5725622cf73142d4e02e18aca3252a4c42 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:08:39 -0400 Subject: [PATCH 07/12] fix(logger): don't escape mentions n shit --- logger/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logger/logger.py b/logger/logger.py index 33b0038..8c70246 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -45,7 +45,7 @@ class Logger(commands.Cog): if channel: embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) embed.set_author(name=f"{author.display_name} - Deleted Message", icon_url=author.display_avatar.url) - embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention} \n") + content + embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n", escape_formatting=False) + content embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}") await channel.send(embed=embed) From 6d0d45736d57bc211d98a8128bc9588992d44109 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:09:51 -0400 Subject: [PATCH 08/12] fix(logger): just include author username in the author field, also include the guild icon in the footer --- logger/logger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/logger/logger.py b/logger/logger.py index 8c70246..3effb8a 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -44,8 +44,8 @@ class Logger(commands.Cog): channel = self.bot.get_channel(c) if channel: embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) - embed.set_author(name=f"{author.display_name} - Deleted Message", icon_url=author.display_avatar.url) + embed.set_author(name=f"{author.name}", icon_url=author.display_avatar.url) embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n", escape_formatting=False) + content - embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}") + embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}", icon_url=guild.icon.url) await channel.send(embed=embed) From 742d786babc1376ce39f64c3bb8c4a6bdb3c42f3 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:13:03 -0400 Subject: [PATCH 09/12] fix(logger): testing if there's a discord api error --- logger/logger.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/logger/logger.py b/logger/logger.py index 3effb8a..097be0a 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -32,10 +32,10 @@ class Logger(commands.Cog): if payload.cached_message.author.bot: return - if len(payload.cached_message.content) > 3898: - content = payload.cached_message.content[:3900] + "..." - else: - content = payload.cached_message.content + # if len(payload.cached_message.content) > 3898: + # content = payload.cached_message.content[:3900] + "..." + # else: + content = payload.cached_message.content author = payload.cached_message.author From c584fb60e2022d003ae6ac5c308a4463bbe22b1e Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:14:05 -0400 Subject: [PATCH 10/12] misc(logger): added some markdown formatting --- logger/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logger/logger.py b/logger/logger.py index 097be0a..b9ca4c9 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -45,7 +45,7 @@ class Logger(commands.Cog): if channel: embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) embed.set_author(name=f"{author.name}", icon_url=author.display_avatar.url) - embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n", escape_formatting=False) + content + embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n>>>", escape_formatting=False) + content embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}", icon_url=guild.icon.url) await channel.send(embed=embed) From 6e7171fc4820449dbd6632b29d6e283c3c1bfdf5 Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:14:27 -0400 Subject: [PATCH 11/12] fix(logger): oops lmao --- logger/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logger/logger.py b/logger/logger.py index b9ca4c9..ad78f81 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -45,7 +45,7 @@ class Logger(commands.Cog): if channel: embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) embed.set_author(name=f"{author.name}", icon_url=author.display_avatar.url) - embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n>>>", escape_formatting=False) + content + embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n>>> ", escape_formatting=False) + content embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}", icon_url=guild.icon.url) await channel.send(embed=embed) From ce3193e113c909c5cda7ccb87a1df120140ac77b Mon Sep 17 00:00:00 2001 From: Seaswimmer Date: Fri, 24 May 2024 03:36:44 -0400 Subject: [PATCH 12/12] some changes or sm idk --- logger/logger.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/logger/logger.py b/logger/logger.py index ad78f81..e856aed 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -32,10 +32,7 @@ class Logger(commands.Cog): if payload.cached_message.author.bot: return - # if len(payload.cached_message.content) > 3898: - # content = payload.cached_message.content[:3900] + "..." - # else: - content = payload.cached_message.content + content = f">>> {payload.cached_message.content}" author = payload.cached_message.author @@ -45,7 +42,7 @@ class Logger(commands.Cog): if channel: embed = discord.Embed(color=discord.Color.from_str(value="#ff470f"), timestamp=datetime.now(tz=UTC)) embed.set_author(name=f"{author.name}", icon_url=author.display_avatar.url) - embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n>>> ", escape_formatting=False) + content + embed.description = bold(text=f"Message sent by {author.mention} deleted in {payload.cached_message.channel.mention}\n", escape_formatting=False) + content embed.set_footer(text=f"Author: {author.id} | Message ID: {payload.message_id}", icon_url=guild.icon.url) await channel.send(embed=embed)