79 lines
2.8 KiB
Python
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)) |