blob/commands/warns.py
2023-11-24 14:47:19 -05:00

79 lines
3.2 KiB
Python

import discord, pymongo, os
from discord.ext import commands
from pymongo import errors
from dotenv import load_dotenv
load_dotenv()
class warns(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_ready(self):
print("Warns Online")
def is_enabled(self):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.settings
if coll.find_one({"_id": {"guild_id": self.guild.id, "commands":"warns"}}):
command = coll.find_one({"_id": {"guild_id": self.guild.id, "commands":"warns"}})
command_enabled = command["enabled"] # True or False
if command_enabled:
return True
else:
return False
else:
return True
@commands.hybrid_command(name="warn", description="Warn a user")
@commands.has_permissions(manage_messages=True)
@commands.check(is_enabled)
async def warn(self, ctx, member:discord.Member, *, reason: str = None):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.warns
embed = discord.Embed(title=f"{member.display_name} was warned!", description=f"The reason for this warn is for **{reason}**", color=ctx.author.color)
await ctx.send(embed=embed)
try:
coll.insert_one({"_id":{"guild":member.guild.id, "user_id":member.id}, "count":1, "reason": reason})
except pymongo.errors.DuplicateKeyError:
coll.update_one({"_id":{"guild":member.guild.id, "user_id":member.id}}, {"$inc":{"count":1}})
@commands.hybrid_command(name="warns", description="Check how many warns a user has")
@commands.check(is_enabled)
async def warns(self, ctx, member:discord.Member = None):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.warns
if member == None:
member = ctx.author
if coll.find_one({"_id":{"guild":ctx.guild.id, "user_id":member.id}}):
user = coll.find_one({"_id":{"guild":member.guild.id, "user_id":member.id}})
embed = discord.Embed(title=f"Warns for {member.display_name}", description=f"{member.display_name} has **{user['count']}** warn(s)! Latest reason is for **{user['reason']}**", color=ctx.author.color)
await ctx.send(embed=embed)
else:
embed = discord.Embed(title=f"{member.display_name} has no warns!", color=ctx.author.color)
await ctx.send(embed=embed)
@commands.hybrid_command(name="clearwarns", description="Clear all warns from a user")
@commands.has_permissions(manage_messages=True)
@commands.check(is_enabled)
async def clearwarns(self, ctx, member:discord.Member):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.warns
coll.delete_one({"_id":{"guild":member.guild.id, "user_id":member.id}})
embed = discord.Embed(title=f"{member.display_name} has been cleared of all warns!", color=ctx.author.color)
await ctx.send(embed=embed)
async def setup(bot):
await bot.add_cog(warns(bot))