diff options
Diffstat (limited to 'code/cogs/warnings.py')
-rw-r--r-- | code/cogs/warnings.py | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/code/cogs/warnings.py b/code/cogs/warnings.py new file mode 100644 index 0000000..f9d84bc --- /dev/null +++ b/code/cogs/warnings.py @@ -0,0 +1,121 @@ +import discord +from discord.ext import commands +import datetime +from discord import app_commands + +from global_variables import CONNECTION, BOT_COLOR + + +class Warnings(commands.Cog): + def __init__(self, bot): + self.bot = bot + + + @app_commands.default_permissions(manage_messages=True) + @app_commands.command() + @app_commands.checks.has_permissions(manage_messages=True) + @app_commands.describe(member='The member you would like to warn') + @app_commands.describe(reason='Reason for warning the member') + async def warn( + self, + interaction: discord.Interaction, + member: discord.Member, + reason: str + ): + "Warn a member for a given reason" + guild_id = interaction.user.guild.id + user_id = member.id + warn_id = interaction.id + warn_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + warned_by = interaction.user.id + + cur = CONNECTION.cursor() + cur.execute("INSERT INTO warnings (warn_id, guild_id, user_id, warning, warn_time, warned_by) VALUES (%s, %s, %s, %s, %s, %s)", (warn_id, guild_id, user_id, reason, warn_time, warned_by)) + CONNECTION.commit() + + embed = discord.Embed( + title=f"`{member.name}#{member.discriminator}` Has Been Warned in {interaction.guild}", + description=f"Reason: {reason}", + color=discord.Color.orange() + ) + embed.set_footer(text=datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S')+" UTC") + await interaction.response.send_message(embed=embed) + + + @app_commands.default_permissions(manage_messages=True) + @app_commands.command() + @app_commands.checks.has_permissions(manage_messages=True) + @app_commands.describe(member='The member whose warnings you want to see') + async def warnings( + self, + interaction: discord.Interaction, + member: discord.Member + ): + "Show all warnings for a given user" + guild_id = interaction.user.guild.id + user_id = member.id + + cur = CONNECTION.cursor() + cur.execute("SELECT * FROM warnings WHERE guild_id = %s AND user_id = %s", (guild_id, user_id)) + data = cur.fetchall() + + if data: + embed=discord.Embed( + title=f"Warnings for `{member.name}#{member.discriminator}` in {interaction.guild}", + description="", + color=discord.Color.orange() + ) + for entry in data: + embed.description += f"**Reason - `\"{entry[3]}\"` | ID: `{entry[0]}`**\nWarned By: <@{entry[5]}> | Date: {entry[4]}\n\n" + + embed.set_footer(text=datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S')+" UTC") + await interaction.response.send_message(embed=embed) + + else: + embed = discord.Embed( + title="No Warnings", + description=f"{member.mention} has not been warned in the past, or all of their warnings have been deleted.", + color=BOT_COLOR + ) + embed.set_footer(text=datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S')+" UTC") + await interaction.response.send_message(embed=embed) + + + @app_commands.default_permissions(manage_messages=True) + @app_commands.command() + @app_commands.checks.has_permissions(manage_messages=True) + @app_commands.describe(id='ID of the warning you would like to delete') + async def delwarn( + self, + interaction: discord.Interaction, + id: str + ): + "Delete a warning from a user with the warning ID" + cur = CONNECTION.cursor() + cur.execute("SELECT warn_id FROM warnings WHERE warn_id = %s", (id,)) + data = cur.fetchone() + + if data: + cur.execute("DELETE FROM warnings WHERE warn_id = %s", (id,)) + CONNECTION.commit() + + embed = discord.Embed( + title="Warning Deleted", + description=f"{interaction.user.mention} has deleted the warning identified by `{id}` .", + color=discord.Color.orange() + ) + embed.set_footer(text=datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S')+" UTC") + await interaction.response.send_message(embed=embed) + + else: + embed = discord.Embed( + title="Invalid ID", + description="That ID is not associated with any warnings in this server.", + color=BOT_COLOR + ) + embed.set_footer(text=datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S')+" UTC") + await interaction.response.send_message(embed=embed, ephemeral=True) + + +async def setup(bot): + await bot.add_cog(Warnings(bot))
\ No newline at end of file |