import logging from dataclasses import dataclass from bson import ObjectId from modules.database import col_users logger = logging.getLogger(__name__) @dataclass class PycordUser: """Dataclass of DB entry of a user""" __slots__ = ("_id", "id") _id: ObjectId id: int @classmethod async def find(cls, id: int): """Find user in database and create new record if user does not exist. ### Args: * id (`int`): User's Discord ID ### Raises: * `RuntimeError`: Raised when user entry after insertion could not be found. ### Returns: * `PycordUser`: User with its database data. """ db_entry = await col_users.find_one({"id": id}) if db_entry is None: inserted = await col_users.insert_one({"id": id}) db_entry = await col_users.find_one({"_id": inserted.inserted_id}) if db_entry is None: raise RuntimeError("Could not find inserted user entry.") return cls(**db_entry)