from motor.motor_asyncio import AsyncIOMotorClient from Christmas.config import ChristmasConfig class MongoDBClient: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.config = ChristmasConfig() self.client = AsyncIOMotorClient(self.config.DATABASE["HOST"], int(self.config.DATABASE["PORT"]), username=self.config.DATABASE["USERNAME"], password=self.config.DATABASE["PASSWORD"])[self.config.DATABASE["DATABASE"]] async def connect(self): return self.client class database: async def get_guild(guild_id: int) -> dict: conn = await MongoDBClient().connect() return await conn.guild.find_one({"_id": guild_id}) async def register_guild(guild_id: int) -> None: conn = await MongoDBClient().connect() await conn.guild.insert_one({"_id": guild_id, "admin_run": False, "music": True}) async def leave_guild(guild_id: int) -> None: conn = await MongoDBClient().connect() await conn.guild.delete_one({"_id": guild_id}) async def insert_mail(send_user_id: int, user_id: int, user_name: str, mail_title: str, mail_content: str): try: conn = await MongoDBClient().connect() mail_title = f"""{mail_title}""" mail_content = f"""{mail_content}""" if await conn.mail.find_one({"_id": user_id}) == None: await conn.mail.insert_one({"_id": user_id, "mails": [{"userid": send_user_id, "username": user_name, "title": mail_title, "content": mail_content, "edited": False}]}) else: result = await conn.mail.update_one({"_id": user_id}, {"$push": {"mails": {"userid": send_user_id, "username": user_name, "title": mail_title, "content": mail_content, "edited": False}}}) print(result) except Exception as e: print(e) async def update_inserted_mail(send_user_id: int, user_id: int, mail_title: str, mail_content: str): try: conn = await MongoDBClient().connect() await conn.mail.update_one({"_id": user_id, "mails.userid": send_user_id}, {"$set": {"mails.$.title": mail_title, "mails.$.content": mail_content, "mails.$.edited": True}}) return True except Exception as e: print(e) return None async def get_instered_mail_edited(send_user_id: int, user_id: int): try: conn = await MongoDBClient().connect() data = await conn.mail.find_one({"_id": user_id}) if data == None: return None for mail in data["mails"]: if mail["userid"] == send_user_id: return mail["edited"] except Exception as e: print(e) return None async def get_mail(user_id: int): conn = await MongoDBClient().connect() data = await conn.mail.find_one({"_id": user_id}) if data == None: return None return data async def get_mail_user(one_user_id: int, two_user_id: int): conn = await MongoDBClient().connect() data = await conn.mail.find_one({"_id": one_user_id}) if data == None: return False for mail in data["mails"]: if mail["userid"] == two_user_id: return True async def register_arcade(guild_id: int, guild_name: str, region): conn = await MongoDBClient().connect() await conn.arcade.insert_one({"_id": guild_id, "guild_name": guild_name, "region": region, "normal_snowball": 10000}) async def update_guild_name(guild_id: int, guild_name: str): conn = await MongoDBClient().connect() await conn.arcade.update_one({"_id": guild_id}, {"$set": {"guild_name": guild_name}}) async def get_arcade(guild_id: int): conn = await MongoDBClient().connect() return await conn.arcade.find_one({"_id": guild_id}) async def update_music_setting(guild_id: int, value: bool, setting: str): conn = await MongoDBClient().connect() if setting == "music": await conn.guild.update_one({"_id": guild_id}, {"$set": {"music": value}}) elif setting == "admin_run": await conn.guild.update_one({"_id": guild_id}, {"$set": {"admin_run": value}}) async def insert_arcade_point(guild_id: int, user_id: int): conn = await MongoDBClient().connect() if await conn.arcadepre.find_one({"_id": guild_id}) == None: await conn.arcadepre.insert_one({"_id": guild_id, "user": [{"_id": user_id, "point": 1}], "vote": 0}) else: await conn.arcadepre.update_one({"_id": guild_id}, {"$inc": {"user.$[elem].point": 1}}, array_filters=[{"elem._id": user_id}]) async def insert_guild_art_point(guild_id: int, amount: int): conn = await MongoDBClient().connect() if await conn.guild.find_one({"_id": guild_id}) == None: await conn.guild.insert_one({"_id": guild_id, "art_point": 1}) else: await conn.guild.update_one({"_id": guild_id}, {"$inc": {"art_point": amount}}) async def use_guild_art_point(guild_id: int): conn = await MongoDBClient().connect() if await conn.guild.find_one({"_id": guild_id, "art_point": {"$gt": 0}}) == None: return False await conn.guild.update_one({"_id": guild_id}, {"$inc": {"art_point": -1}}) return True async def get_guild_art_point(guild_id: int): conn = await MongoDBClient().connect() if await conn.guild.find_one({"_id": guild_id, "art_point": {"$exists": True}}) == None: return 0 else: result = await conn.guild.find_one({"_id": guild_id}) return result["art_point"] async def get_use_art(guild_id: int): conn = await MongoDBClient().connect() if await conn.guild.find_one({"_id": guild_id, "art": {"$exists": True}}) == None: return 0 else: result = await conn.guild.find_one({"_id": guild_id}) return result["art"] async def put_use_art(guild_id: int): conn = await MongoDBClient().connect() if await conn.guild.find_one({"_id": guild_id, "art": {"$exists": True}}) == None: await conn.guild.update_one({"_id": guild_id}, {"$set": {"art": 1}}) else: await conn.guild.update_one({"_id": guild_id}, {"$inc": {"art": 1}})