69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
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,
|
|
}
|