aboutsummaryrefslogtreecommitdiffstats
path: root/backend/models/discord_user.py
diff options
context:
space:
mode:
authorGravatar Kieran Siek <[email protected]>2022-03-20 17:25:06 -0400
committerGravatar GitHub <[email protected]>2022-03-20 17:25:06 -0400
commit25fce5e0161c2d84d4a6b710aa5c83a863766f98 (patch)
treee3c15dad453f8d518bbf5335a14eddedf2c2d054 /backend/models/discord_user.py
parentMerge pull request #151 from python-discord/dependabot/pip/sentry-sdk-1.5.7 (diff)
parentMerge branch 'main' into roles (diff)
Merge pull request #135 from python-discord/roles
Overhaul Access System
Diffstat (limited to 'backend/models/discord_user.py')
-rw-r--r--backend/models/discord_user.py34
1 files changed, 32 insertions, 2 deletions
diff --git a/backend/models/discord_user.py b/backend/models/discord_user.py
index 9f246ba..0eca15b 100644
--- a/backend/models/discord_user.py
+++ b/backend/models/discord_user.py
@@ -1,10 +1,11 @@
+import datetime
import typing as t
from pydantic import BaseModel
-class DiscordUser(BaseModel):
- """Schema model of Discord user for form response."""
+class _User(BaseModel):
+ """Base for discord users and members."""
# Discord default fields.
username: str
@@ -20,5 +21,34 @@ class DiscordUser(BaseModel):
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