from pydantic import BaseModel from typing import List, Optional, Union from datetime import datetime class MapPlay(BaseModel): """Used to store map playthroughs for players""" Played: bool = True # Obviously Clear: bool = False FullClear: bool = False class User(BaseModel): """Pydantic model for user data. Created from the user response (`/api/v1/user/x`), some values might be unused. Color values are decimal versions of joined hexadecimal codes (for example (0xFF, 0x00, 0x00) is joined to 0xFF0000 and converted to 16711680) """ Admin: bool = True Banned: bool = False BulletSpr: int = 0 CapeColor: int = 0 Costume: int = 0 Country: int = 0 CreatedAt: str = datetime.strftime(datetime.now(), "%Y-%m-%dT%H:%M:%SZ") DeathEffect: int = 0 DeletedAt: Optional[str] = None FacialExpression: int = 0 Followed: bool = False FollowerColor: int = 0 FollowerSpr: int = 0 GunSpr: int = 0 HairColor: int = 0 HairSpr: int = 0 HatColor: int = 0 HatColorInv: int = 0 HatSpr: int = 0 ID: int = 0 NumMapsClear: int = 0 NumMapsCreated: int = 0 NumSpeedrunRecords: int = 0 PantsColor: int = 0 RecordEndurance0: int = 0 RecordEndurance1: int = 0 RecordEndurance2: int = 0 RecordEndurance3: int = 0 RecordExplorer: int = 0 RecordHardcore: int = 0 RecordRoulette: int = 0 RecordScribble0: int = 0 RecordScribble1: int = 0 RecordScribble2: int = 0 RecordScribble3: int = 0 SaveEffect: int = 0 ShirtColor: int = 0 ShoesColor: int = 0 SkinColor: int = 0 SwordSpr: int = 0 TextSnd: int = 0 Unlocks: str = "" UpdatedAt: str = datetime.strftime(datetime.now(), "%Y-%m-%dT%H:%M:%SZ") Username: str = "magmaus3" Email: str = "user@example.com" # Ratings have to be stored in the following format: {mapID: rating}, # where rating is either 1 or 5, or None. Ratings: dict[str, Optional[int]] = {} # Plays are stored in the following format: # {mapID: {}} # (str type is used instead of an int because MongoDB) Plays: dict[str, MapPlay] = {} class Notification(BaseModel): """Pydantic model for Notifications Available notification types: - 0: took your record on with time