blob/commands/warns.py
2025-01-25 16:31:29 -05:00

79 lines
2.8 KiB
Python

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))