import discord import pymongo import os from discord.ext import commands from discord import app_commands client = pymongo.MongoClient(os.getenv("mongo_url")) db = client.warns class Warns(commands.Cog): def __init__(self, bot): self.bot = bot @commands.Cog.listener() async def on_ready(self): print("Warns Online") warns = app_commands.Group(name="warns", description="Manage warns in your server") @warns.command(name="warn", description="Warn a user") @commands.has_permissions(manage_messages=True) async def warn(self, interaction: discord.Interaction, member: discord.Member, *, reason: str = None): user_coll = db.users guild_coll = db.guilds guild = guild_coll.find_one({"_id": interaction.guild.id}) user = user_coll.find_one({"_id": member.id}) if guild is None: guild_coll.insert_one({"_id": interaction.guild.id}) if user is None: user_coll.insert_one({"_id": member.id, "count": 1, "warns": [reason]}) else: user_coll.update_one({"_id": member.id}, {"$inc": {"count": 1}}) user_coll.update_one({"_id": member.id}, {"$push": {"warns": reason}}) embed = discord.Embed(title="Warned", description=f"{member.mention} you have been warned for {reason}", color=interaction.user.color) await interaction.response.send_message(embed=embed) @warns.command(name="check", description="Check how many warns a user has") async def check(self, interaction: discord.Interaction, member: discord.Member = None): if member is None: member = interaction.user user_coll = db.users user = user_coll.find_one({"_id": member.id}) if user is None: await interaction.response.send_message("This user has no warns!") return warns = user['warns'] em = discord.Embed(title="Warns", description=f"Warns for {member.display_name}", color=interaction.user.color) for i, warn in enumerate(warns): em.add_field(name=f"Warn #{i + 1}", value=f"{warn}", inline=False) await interaction.response.send_message(embed=em) @warns.command(name="clear", description="Clear all warns from a user") @commands.has_permissions(manage_messages=True) async def clear(self, interaction: discord.Interaction, member: discord.Member): user_coll = db.users user = user_coll.find_one({"_id": member.id}) if user is None: await interaction.response.send_message(f"{member.mention} has no warns!") return user_coll.delete_one({"_id": member.id}) await interaction.response.send_message(f"{member.mention} warns have been cleared!") async def setup(bot): await bot.add_cog(Warns(bot))