From 3e786da5537cc243097b4bedb8e6b78ad1525f95 Mon Sep 17 00:00:00 2001 From: Hassan Abouelela Date: Sat, 22 Jan 2022 01:54:15 +0300 Subject: Add Helper Functions For Managing Roles Signed-off-by: Hassan Abouelela --- backend/models/discord_role.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 backend/models/discord_role.py (limited to 'backend/models/discord_role.py') diff --git a/backend/models/discord_role.py b/backend/models/discord_role.py new file mode 100644 index 0000000..9f0b7dd --- /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): + """ + 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] -- cgit v1.2.3