import discord from discord.ext import commands from discord.commands import Option from discord.commands import slash_command import os from dotenv import load_dotenv import mysql.connector import configparser #Bot initialization class modinfo(commands.Cog): def __init__(self, bot: discord.Bot): self.bot = bot #---------------------------------# #ENV initialization load_dotenv() dbhost = os.getenv("HOST") if dbhost is None: raise ValueError("HOST not found in .env file") dbname = os.getenv("NAME") if dbname is None: raise ValueError("NAME not found in .env file") dbpsswd = os.getenv("PASSWORD") if dbpsswd is None: raise ValueError("PASSWORD not found in .env file") dbdb = os.getenv("DATABASE") if dbdb is None: raise ValueError("DATABASE not found in .env file") #Database initialization conn = mysql.connector.connect( host=dbhost, user=dbname, password=dbpsswd ) self.cursor = conn.cursor() conn.database = dbdb #Command initialization @slash_command(name="modinfo", description="Shows the moderative history of a user from this Server") async def modinfo( self, ctx, user: Option(discord.User, required=True) # type: ignore ): await ctx.defer(ephemeral=False) if not ctx.author.guild_permissions.kick_members: await ctx.followup.send("No permission.", ephemeral=True) return embed = discord.Embed( title=f"__Moderation History for {user.name}__", color=discord.Color.orange() ) self.cursor.execute( "SELECT moderatorname, reason, date FROM Warns WHERE userid = %s", (user.id,) ) warns = self.cursor.fetchall() if warns: for moderatorname, reason, date in warns: embed.add_field( name=f"Warned by {moderatorname} on {date.strftime('%Y-%m-%d %H:%M:%S')}", value=f"Reason: {reason}", inline=False ) self.cursor.execute( "SELECT moderatorname, reason, date FROM Kick WHERE userid = %s", (user.id,) ) kicks = self.cursor.fetchall() if kicks: for moderatorname, reason, date in kicks: embed.add_field( name=f"Kicked by {moderatorname} on {date.strftime('%Y-%m-%d %H:%M:%S')}", value=f"Reason: {reason}", inline=False ) self.cursor.execute( "SELECT moderatorname, reason, date FROM Bans WHERE userid = %s", (user.id,) ) bans = self.cursor.fetchall() if bans: for moderatorname, reason, date in bans: embed.add_field( name=f"Banned by {moderatorname} on {date.strftime('%Y-%m-%d %H:%M:%S')}", value=f"Reason: {reason}", inline=False ) self.cursor.execute( "SELECT moderatorname, reason, date FROM Unbans WHERE userid = %s", (user.id,) ) unbans = self.cursor.fetchall() if unbans: for moderatorname, reason, date in unbans: embed.add_field( name=f"Unbanned by {moderatorname} on {date.strftime('%Y-%m-%d %H:%M:%S')}", value=f"Reason: {reason}", inline=False ) if not warns and not kicks and not bans and not unbans: await ctx.followup.send(f"User `{user.name}` has no moderation history.", ephemeral=True) return embed.set_thumbnail(url=user.display_avatar.url) embed.set_author(name="VicePD", icon_url="https://i.imgur.com/6QteFrg.png") embed.set_footer(text="VicePD - Bot | Made by BaumSplitter41") await ctx.followup.send(embed=embed, ephemeral=False) def setup(bot: discord.Bot): bot.add_cog(modinfo(bot))