from dataclasses import dataclass, field from typing import Any @dataclass(slots=True) class UserProfile: user_id: int username: str | None = None registered: str = "" cookies_loaded: int = 0 total_earned: float = 0.0 referral_earned: float = 0.0 balance: float = 0.0 referrer: int | None = None referrals: list[int] = field(default_factory=list) is_admin: bool = False is_banned: bool = False ban_reason: str = "" @classmethod def default( cls, user_id: int, username: str | None = None, registered: str = "", referrer: int | None = None, is_admin: bool = False, ) -> "UserProfile": return cls( user_id=user_id, username=username, registered=registered, referrer=referrer, is_admin=is_admin, ) @classmethod def from_dict(cls, data: dict[str, Any]) -> "UserProfile": return cls( user_id=int(data.get("user_id", 0)), username=data.get("username"), registered=data.get("registered", ""), cookies_loaded=int(data.get("cookies_loaded", 0)), total_earned=float(data.get("total_earned", 0.0)), referral_earned=float(data.get("referral_earned", 0.0)), balance=float(data.get("balance", 0.0)), referrer=data.get("referrer"), referrals=[int(x) for x in data.get("referrals", [])], is_admin=bool(data.get("is_admin", False)), is_banned=bool(data.get("is_banned", False)), ban_reason=data.get("ban_reason", ""), ) def to_dict(self) -> dict[str, Any]: return { "user_id": self.user_id, "username": self.username, "registered": self.registered, "cookies_loaded": self.cookies_loaded, "total_earned": self.total_earned, "referral_earned": self.referral_earned, "balance": self.balance, "referrer": self.referrer, "referrals": self.referrals, "is_admin": self.is_admin, "is_banned": self.is_banned, "ban_reason": self.ban_reason, }