From 8f39ee99483dc192262ea865844cc47d0ae9eec3 Mon Sep 17 00:00:00 2001 From: TheMisterSenpai Date: Sun, 20 Mar 2022 15:10:44 +0300 Subject: [PATCH] initial structure guild --- melisa/models/guild/guild.py | 256 +++++++++++++++++++++++++++++++++++ 1 file changed, 256 insertions(+) diff --git a/melisa/models/guild/guild.py b/melisa/models/guild/guild.py index e00cb35..6da5ab0 100644 --- a/melisa/models/guild/guild.py +++ b/melisa/models/guild/guild.py @@ -1,2 +1,258 @@ # Copyright MelisaDev 2022 - Present # Full MIT License can be found in `LICENSE.txt` at the project root. + +from __future__ import annotations + +from dataclasses import dataclass +from enum import IntEnum, Enum, Flag +from typing import Optional, Tuple, List, Literal + +from ...utils import Snowflake +from ...utils import APIModelBase +from ...utils.types import APINullable + + +class DefaultMessageNotificationLevel(IntEnum): + """""" + + ALL_MESSAGES = 0 + ONLY_MENTIONS = 1 + + def __int__(self): + return self.value + + +class ExplicitContentFilterLevel(IntEnum): + """""" + + DISABLED = 0 + MEMBERS_WITHOUT_ROLES = 1 + ALL_MEMBERS = 2 + + def __int__(self): + return self.value + + +class MFALevel(IntEnum): + """""" + + NONE = 0 + ELEVATED = 1 + + def __int__(self): + return self.value + + +class VerificationLevel(IntEnum): + """""" + + NONE = 0 + LOW = 1 + MEDIUM = 2 + HIGH = 3 + VERY_HIGH = 4 + + def __int__(self): + return self.value + + +class GuildNSFWLevel(IntEnum): + """""" + + DEFAULT = 0 + EXPLICIT = 1 + SAFE = 2 + AGE_RESTRICTED = 3 + + def __int__(self): + return self.value + + +class PremiumTier(IntEnum): + """""" + + NONE = 0 + TIER_1 = 1 + TIER_2 = 2 + TIER_3 = 3 + + def __int__(self): + return self.value + + +class SystemChannelFlags(IntEnum): + """""" + + SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0 + SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1 + SUPPRESS_GUILD_REMINDER_NOTIFICATIONS = 1 << 2 + SUPPRESS_JOIN_NOTIFICATION_REPLIES = 1 << 3 + + def __int__(self): + return self.value + + +class GuildFeatures(Enum): + """""" + + ANIMATED_ICON = "ANIMATED_ICON" + BANNER = "BANNER" + COMMERCE = "COMMERCE" + COMMUNITY = "COMMUNITY" + DISCOVERABLE = "DISCOVERABLE" + FEATURABLE = "FEATURABLE" + INVITE_SPLASH = "INVITE_SPLASH" + MEMBER_VERIFICATION_GATE_ENABLED = "MEMBER_VERIFICATION_GATE_ENABLED" + MONETIZATION_ENABLED = "MONETIZATION_ENABLED" + MORE_STICKERS = "MORE_STICKERS" + NEWS = "NEWS" + PARTNERED = "PARTNERED" + PREVIEW_ENABLED = "PREVIEW_ENABLED" + PRIVATE_THREADS = "PRIVATE_THREADS" + ROLE_ICONS = "ROLE_ICONS" + SEVEN_DAY_THREAD_ARCHIVE = "SEVEN_DAY_THREAD_ARCHIVE" + THREE_DAY_THREAD_ARCHIVE = "THREE_DAY_THREAD_ARCHIVE" + TICKETED_EVENTS_ENABLED = "TICKETED_EVENTS_ENABLED" + VANITY_URL = "VANITY_URL" + VERIFIED = "VERIFIED" + VIP_REGIONS = "VIP_REGIONS" + WELCOME_SCREEN_ENABLED = "WELCOME_SCREEN_ENABLED" + + +@dataclass(repr=False) +class Guild(APIModelBase): + """""" + + id: APINullable[Snowflake] = None + name: APINullable[str] = None + icon: APINullable[str] = None + icon_hash: APINullable[str] = None + splash: APINullable[str] = None + discovery_splash: APINullable[str] = None + owner: APINullable[bool] = None + owner_id: APINullable[Snowflake] = None + permissions: APINullable[str] = None + region: APINullable[str] = None + afk_channel_id: APINullable[Snowflake] = None + afk_timeout: APINullable[int] = None + widget_enabled: APINullable[bool] = None + widget_channel_id: APINullable[Snowflake] = None + verification_level: APINullable[int] = None + default_message_notifications: APINullable[int] = None + explicit_content_filter: APINullable[int] = None + features: APINullable[List[GuildFeatures]] = None + #TODO: Make a structure for emoji and role + + mfa_level: APINullable[int] = None + application_id: APINullable[Snowflake] = None + system_channel_id: APINullable[Snowflake] = None + system_channel_flags: APINullable[int] = None + rules_channel_id: APINullable[Snowflake] = None + #TODO: Deal with joined_at + + large: APINullable[bool] = None + unavailable: APINullable[bool] = None + member_count: APINullable[int] = None + #TODO: Make a structure for voice_states, members, channels, threads, presences(?) + + max_presences: APINullable[int] = None + max_members: APINullable[int] = None + vanity_url_code: APINullable[str] = None + description: APINullable[str] = None + banner: APINullable[str] = None + premium_tier: APINullable[str] = None + premium_subscription_count: APINullable[int] = None + preferred_locale: APINullable[str] = None + public_updates_channel_id: APINullable[Snowflake] = None + max_video_channel_users: APINullable[int] = None + approximate_member_count: APINullable[int] = None + approximate_presence_count: APINullable[int] = None + nsfw_level: APINullable[int] = None + premium_progress_bar_enabled: APINullable[bool] = None + #TODO: Make a structure for welcome_screen, stage_instances, stickers and guild_scheduled_events + + + async def get_guild(self, _id: id, with_counts: bool = False ): + """""" + + return await self._http.get( + f"/guild/{_id}", params = {"with_counts": "true" if with_counts else None}) + + + + @property + def default_message_notifications(self) -> Optional[DefaultMessageNotificationLevel]: + """""" + + return( + None + if self.default_message_notifications is None + else DefaultMessageNotificationLevel(self.default_message_notifications) + ) + + @property + def explicit_content_filter(self) -> Optional[ExplicitContentFilterLevel]: + """""" + + return( + None + if self.explicit_content_filter is None + else ExplicitContentFilterLevel(self.explicit_content_filter) + ) + + @property + def mfa_level(self) -> Optional[MFALevel]: + """""" + + return( + None + if self.mfa_level is None + else MFALevel(self.mfa_level) + ) + + @property + def verification_level(self) -> Optional[VerificationLevel]: + """""" + + return( + None + if self.verification_level is None + else VerificationLevel(self.verification_level) + ) + + @property + def nsfw_level(self) -> Optional[GuildNSFWLevel]: + """""" + + return( + None + if self.nsfw_level is None + else GuildNSFWLevel(self.nsfw_level) + ) + + @property + def premium_tier(self) -> Optional(PremiumTier): + """""" + + return( + None + if self.premium_tier is None + else PremiumTier(self.premium_tier) + ) + + @property + def system_channel_flags(self) -> Optional[SystemChannelFlags]: + """""" + + return( + None + if self.system_channel_flags is None + else SystemChannelFlags(self.system_channel_flags) + ) + + +@dataclass(repr=False) +class UnavailableGuild(APIModelBase): + + id: APINullable[Snowflake] = None + unavailable: APINullable[bool] = True