From 8929a2c1906a95dbac28468fc4c335c9f63a59b3 Mon Sep 17 00:00:00 2001 From: SeaswimmerTheFsh Date: Thu, 14 Dec 2023 19:57:43 -0500 Subject: [PATCH] feat(moderation): resolving moderations now logs in the changes list --- moderation/moderation.py | 47 ++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/moderation/moderation.py b/moderation/moderation.py index e120856..1a291ea 100644 --- a/moderation/moderation.py +++ b/moderation/moderation.py @@ -374,6 +374,7 @@ class Moderation(commands.Cog): - 'message' - 'log' - WIP - 'case' + - 'changes' Required arguments for 'message': - guild @@ -387,7 +388,7 @@ class Moderation(commands.Cog): - case_dict - resolved (optional) - Required arguments for 'case': + Required arguments for 'case' & 'changes': - interaction - case_dict""" if embed_type == 'message': @@ -1046,6 +1047,28 @@ class Moderation(commands.Cog): if reason is None: reason = "No reason given." + changes: list = case['changes'] + if len(changes) > 25: + await interaction.response.send_message(content="Due to limitations with Discord's embed system, you cannot edit a case more than 25 times.", ephemeral=True) + return + if not changes: + changes.append( + { + 'type': "ORIGINAL", + 'timestamp': case['timestamp'], + 'reason': case['reason'], + 'user_id': case['moderator_id'] + } + ) + changes.append( + { + 'type': "RESOLVE", + 'timestamp': int(time.time()), + 'reason': reason, + 'user_id': interaction.user.id + } + ) + if case['moderation_type'] in ['UNMUTE', 'UNBAN']: await interaction.response.send_message(content="You cannot resolve this type of moderation!", ephemeral=True) @@ -1066,19 +1089,14 @@ class Moderation(commands.Cog): except discord.NotFound: pass - resolve_query = f"UPDATE `{db}`.`moderation_{interaction.guild.id}` SET resolved = 1, expired = 1, resolved_by = %s, resolve_reason = %s WHERE moderation_id = %s" + resolve_query = f"UPDATE `{db}`.`moderation_{interaction.guild.id}` SET resolved = 1, expired = 1, changes = %s, resolved_by = %s, resolve_reason = %s WHERE moderation_id = %s" else: - resolve_query = f"UPDATE `{db}`.`moderation_{interaction.guild.id}` SET resolved = 1, resolved_by = %s, resolve_reason = %s WHERE moderation_id = %s" + resolve_query = f"UPDATE `{db}`.`moderation_{interaction.guild.id}` SET resolved = 1, changes = %s, resolved_by = %s, resolve_reason = %s WHERE moderation_id = %s" - cursor.execute(resolve_query, (interaction.user.id, reason, case_number)) + cursor.execute(resolve_query, (json.dumps(changes), interaction.user.id, reason, case_number)) database.commit() - response_query = "SELECT * FROM moderation_%s WHERE moderation_id = %s;" - cursor.execute(response_query, (interaction.guild.id, case_number)) - result = cursor.fetchone() - case_dict = self.generate_dict(result) - - embed = await self.embed_factory('case', interaction=interaction, case_dict=case_dict) + embed = await self.embed_factory('case', interaction=interaction, case_dict=await self.fetch_case(case_number, interaction.guild.id)) await interaction.response.send_message(content=f"✅ Moderation #{case_number} resolved!", embed=embed) await self.log(interaction, case_number, True) @@ -1086,7 +1104,7 @@ class Moderation(commands.Cog): database.close() @app_commands.command(name="case") - async def case(self, interaction: discord.Interaction, case_number: int, ephemeral: bool = False): + async def case(self, interaction: discord.Interaction, case_number: int, ephemeral: bool = False, changes: bool = False): """Check the details of a specific case. Parameters @@ -1103,7 +1121,10 @@ class Moderation(commands.Cog): if case_number != 0: case = await self.fetch_case(case_number, interaction.guild.id) if case: - embed = await self.embed_factory('case', interaction=interaction, case_dict=case) + if changes: + embed = await self.embed_factory('changes', interaction=interaction, case_dict=case) + else: + embed = await self.embed_factory('case', interaction=interaction, case_dict=case) await interaction.response.send_message(embed=embed, ephemeral=ephemeral) return await interaction.response.send_message(content=f"No case with case number `{case_number}` found.", ephemeral=True) @@ -1137,6 +1158,7 @@ class Moderation(commands.Cog): if not changes: changes.append( { + 'type': "ORIGINAL", 'timestamp': case['timestamp'], 'reason': case['reason'], 'user_id': case['moderator_id'] @@ -1144,6 +1166,7 @@ class Moderation(commands.Cog): ) changes.append( { + 'type': "EDIT", 'timestamp': int(time.time()), 'reason': reason, 'user_id': interaction.user.id