import datetime import typing as t from pydantic import BaseModel class _User(BaseModel): """Base for discord users and members.""" # Discord default fields. username: str id: str discriminator: str avatar: t.Optional[str] bot: t.Optional[bool] system: t.Optional[bool] locale: t.Optional[str] verified: t.Optional[bool] email: t.Optional[str] flags: t.Optional[int] premium_type: t.Optional[int] public_flags: t.Optional[int] class DiscordUser(_User): """Schema model of Discord user for form response.""" # Custom fields admin: bool class DiscordMember(BaseModel): """A discord guild member.""" user: _User nick: t.Optional[str] avatar: t.Optional[str] roles: list[str] joined_at: datetime.datetime premium_since: t.Optional[datetime.datetime] deaf: bool mute: bool pending: t.Optional[bool] permissions: t.Optional[str] communication_disabled_until: t.Optional[datetime.datetime] def dict(self, *args, **kwargs) -> dict[str, t.Any]: """Convert the model to a python dict, and encode timestamps in a serializable format.""" data = super().dict(*args, **kwargs) for field, value in data.items(): if isinstance(value, datetime.datetime): data[field] = value.isoformat() return data