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}) 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, "mails.userid": send_user_id}) return data["mails"][0]["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