From 71d7329696679041a00d2f58d2f67b76abc3f724 Mon Sep 17 00:00:00 2001 From: SeaswimmerTheFsh Date: Wed, 13 Dec 2023 14:48:44 -0500 Subject: [PATCH] fix(moderation): fixed history command (hopefully) --- moderation/moderation.py | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/moderation/moderation.py b/moderation/moderation.py index 8c04671..f402d8e 100644 --- a/moderation/moderation.py +++ b/moderation/moderation.py @@ -697,9 +697,10 @@ class Moderation(commands.Cog): Page to select epheremal: bool Hide the command response""" + await interaction.response.defer(ephemeral=ephemeral) permissions = self.check_permissions(interaction.client.user, ['embed_links'], interaction) if permissions: - await interaction.response.send_message(f"I do not have the `{permissions}` permission, required for this action.", ephemeral=True) + await interaction.followup.send(f"I do not have the `{permissions}` permission, required for this action.", ephemeral=True) return database = await self.connect() cursor = database.cursor() @@ -751,7 +752,7 @@ class Moderation(commands.Cog): if bool(case['resolved']): field_value = field_value + "\n**Resolved:** True" embed.add_field(name=field_name, value=field_value, inline=False) - await interaction.response.send_message(embed=embed, ephemeral=ephemeral) + await interaction.followup.send(embed=embed) @app_commands.command(name="resolve") async def resolve(self, interaction: discord.Interaction, case_number: int, reason: str = None): @@ -861,14 +862,35 @@ class Moderation(commands.Cog): moderation_ids = [row[1] for row in result] for target_id, moderation_id in zip(target_ids, moderation_ids): user: discord.User = await self.bot.fetch_user(target_id) - await guild.unban(user, reason=f"Automatic unban from case #{moderation_id}") - embed = await self.embed_factory('message', guild, f'Automatic unban from case #{moderation_id}', 'unbanned') try: - await user.send(embed=embed) - except discord.errors.HTTPException: + await guild.unban(user, reason=f"Automatic unban from case #{moderation_id}") + embed = await self.embed_factory('message', guild, f'Automatic unban from case #{moderation_id}', 'unbanned') + try: + await user.send(embed=embed) + except discord.errors.HTTPException: + pass + except [discord.errors.NotFound, discord.errors.Forbidden, discord.errors.HTTPException] as e: + print(f"Failed to unban {user.name}#{user.discriminator} ({user.id}) from {guild.name} ({guild.id})\n{e}") pass - expiry_query = f"UPDATE `{db}`.`moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= %s AND expired = 0) OR (expired = 0 AND resolved = 1)" + expiry_query = f"UPDATE `{db}`.`moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= %s AND expired = 0 AND moderation_type != 'BLACKLIST') OR (expired = 0 AND resolved = 1 AND moderation_type != 'BLACKLIST')" cursor.execute(expiry_query, (time.time(),)) + blacklist_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= %s AND moderation_type = 'BLACKLIST' AND expired = 0" + try: + cursor.execute(blacklist_query, (time.time(),)) + result = cursor.fetchall() + except mysql.connector.errors.ProgrammingError: + continue + target_ids = [row[0] for row in result] + moderation_ids = [row[1] for row in result] + role_ids = [row[2] for row in result] + for target_id, moderation_id, role_id in zip(target_ids, moderation_ids, role_ids): + try: + member: discord.Member = await guild.fetch_member(target_id) + role: discord.Role = guild.get_role(role_id) + if role is None: + raise discord.errors.NotFound + except [discord.errors.NotFound, discord.errors.Forbidden, discord.errors.HTTPException]: + continue database.commit() cursor.close() database.close()