aboutsummaryrefslogtreecommitdiffstats
path: root/backend/models/discord_role.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_role.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_role.py')
-rw-r--r--backend/models/discord_role.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/backend/models/discord_role.py b/backend/models/discord_role.py
new file mode 100644
index 0000000..c05c9de
--- /dev/null
+++ b/backend/models/discord_role.py
@@ -0,0 +1,40 @@
+import typing
+
+from pydantic import BaseModel
+
+
+class RoleTags(BaseModel):
+ """Meta information about a discord role."""
+
+ bot_id: typing.Optional[str]
+ integration_id: typing.Optional[str]
+ premium_subscriber: bool
+
+ def __init__(self, **data: typing.Any) -> None:
+ """
+ Handle the terrible discord API.
+
+ Discord only returns the premium_subscriber field if it's true,
+ meaning the typical validation process wouldn't work.
+
+ We manually parse the raw data to determine if the field exists, and give it a useful
+ bool value.
+ """
+ data["premium_subscriber"] = "premium_subscriber" in data.keys()
+ super().__init__(**data)
+
+
+class DiscordRole(BaseModel):
+ """Schema model of Discord guild roles."""
+
+ id: str
+ name: str
+ color: int
+ hoist: bool
+ icon: typing.Optional[str]
+ unicode_emoji: typing.Optional[str]
+ position: int
+ permissions: str
+ managed: bool
+ mentionable: bool
+ tags: typing.Optional[RoleTags]