feat(moderation): added case command
Some checks failed
Pylint / Pylint (push) Failing after 1m13s

This commit is contained in:
Seaswimmer 2023-10-05 12:58:57 -04:00
parent 2982b475ca
commit c783f4032a
No known key found for this signature in database
GPG key ID: 5019678FD9CF50D8

View file

@ -185,7 +185,7 @@ class Moderation(commands.Cog):
cursor.execute(f"SELECT moderation_id FROM `moderation_{guild_id}` ORDER BY moderation_id DESC LIMIT 1")
return cursor.fetchone()[0] + 1
async def embed_factory(self, embed_type: str, guild: discord.Guild, reason: str, moderation_type: str, response: discord.InteractionMessage, duration: timedelta = None):
async def embed_factory(self, embed_type: str, guild: discord.Guild, reason: str, moderation_type: str, response: discord.InteractionMessage = None, duration: timedelta = None):
"""This method creates an embed from set parameters, meant for either moderation logging or contacting the moderated user.
Valid arguments for 'embed_type':
@ -350,6 +350,53 @@ class Moderation(commands.Cog):
pass
await self.mysql_log(interaction.guild.id, interaction.user.id, 'UNBAN', target.id, 'NULL', reason)
@app_commands.command(name="case")
async def case(self, interaction: discord.Interaction, case_number: int, ephemeral: bool = False):
"""Check the details of a specific case."""
database = await self.connect()
cursor = database.cursor()
query = "SELECT * FROM moderation_%s WHERE moderation_id = %s;"
cursor.execute(query, (interaction.guild.id, case_number))
result = cursor.fetchone()
cursor.close()
database.close()
if result:
case = {
"moderation_id": result[0],
"timestamp": result[1],
"moderation_type": result[2],
"target_id": result[3],
"moderator_id": result[4],
"duration": result[5],
"end_timestamp": result[6],
"reason": result[7],
"resolved": result[8],
"resolve_reason": result[9],
"expired": result[10]
}
try:
target = interaction.client.get_user(case["target_id"])
except discord.errors.NotFound:
target = discord.User(id=case["target_id"], name="Deleted User", discriminator="0")
try:
moderator = interaction.client.get_user(case["moderator_id"])
except discord.errors.NotFound:
moderator = discord.User(id=case["moderator_id"], name="Deleted User", discriminator="0")
target_name = target.name if target.discriminator == "0" else f"{target.name}#{target.discriminator}"
moderator_name = moderator.name if moderator.discriminator == "0" else f"{moderator.name}#{moderator.discriminator}"
embed = discord.Embed(title=f"📕 Case #{case['moderation_id']} - {str.title(case['moderation_type'])}", color=await self.bot.get_embed_color(None))
embed.description = f"**Target:** {target_name} ({target.id})\n**Moderator:** {moderator_name} ({moderator.id})\n**Resolved:** {bool(case['resolved'])}\n**Timestamp:** <:t{case['timestamp']}> | <t:{case['timestamp']}:R>"
if case['duration'] != 'NULL':
expired = True if case["end_timestamp"] <= time.time() else False
embed.description = embed.description + f"**Duration:** {humanize.naturaldelta(case['duration'])}\n**Expired:** {expired}"
embed.add_field(name='Reason', value=f"```{case['reason']}```")
if case['resolved'] == 1:
embed.add_field(name='Resolve Reason', value=f"```{case['resolve_reason']}```")
await interaction.response.send_message(embed=embed, ephemeral=ephemeral)
else:
await interaction.response.send_message(content=f"No case with case number `{case_number}` found.", ephemeral=True)
@commands.group(autohelp=True)
@checks.admin()
async def moderationset(self, ctx: commands.Context):