diff options
| author | Rapptz <[email protected]> | 2021-04-16 11:21:13 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2021-04-16 11:27:23 -0400 |
| commit | 9eaf1e85e4e987b5f874a7ba4c3ed13de10fd154 (patch) | |
| tree | 83a60b0aaff3c1b63868631418cb7583adda054d /discord/guild.py | |
| parent | Add `fetch_message` for webhooks (diff) | |
| download | discord.py-9eaf1e85e4e987b5f874a7ba4c3ed13de10fd154.tar.xz discord.py-9eaf1e85e4e987b5f874a7ba4c3ed13de10fd154.zip | |
Rewrite Asset design
This is a breaking change.
This does the following transformations, assuming `asset` represents
an asset type.
Object.is_asset_animated() => Object.asset.is_animated()
Object.asset => Object.asset.key
Object.asset_url => Object.asset_url
Object.asset_url_as => Object.asset.replace(...)
Since the asset type now requires a key (or hash, if you will),
Emoji had to be flattened similar to how Attachment was done since
these assets are keyed solely ID.
Emoji.url (Asset) => Emoji.url (str)
Emoji.url_as => removed
Emoji.url.read => Emoji.read
Emoji.url.save => Emoji.save
This transformation was also done to PartialEmoji.
Diffstat (limited to 'discord/guild.py')
| -rw-r--r-- | discord/guild.py | 179 |
1 files changed, 31 insertions, 148 deletions
diff --git a/discord/guild.py b/discord/guild.py index 3f63d873..20eff90b 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -94,8 +94,6 @@ class Guild(Hashable): The timeout to get sent to the AFK channel. afk_channel: Optional[:class:`VoiceChannel`] The channel that denotes the AFK channel. ``None`` if it doesn't exist. - icon: Optional[:class:`str`] - The guild's icon. id: :class:`int` The guild's ID. owner_id: :class:`int` @@ -118,8 +116,6 @@ class Guild(Hashable): The maximum amount of users in a video channel. .. versionadded:: 1.4 - banner: Optional[:class:`str`] - The guild's banner. description: Optional[:class:`str`] The guild's description. mfa_level: :class:`int` @@ -154,8 +150,6 @@ class Guild(Hashable): - ``MEMBER_VERIFICATION_GATE_ENABLED``: Guild has Membership Screening enabled. - ``PREVIEW_ENABLED``: Guild can be viewed before being accepted via Membership Screening. - splash: Optional[:class:`str`] - The guild's invite splash. premium_tier: :class:`int` The premium tier for this guild. Corresponds to "Nitro Server" in the official UI. The number goes from 0 to 3 inclusive. @@ -164,10 +158,6 @@ class Guild(Hashable): preferred_locale: Optional[:class:`str`] The preferred locale for the guild. Used when filtering Server Discovery results to a specific language. - discovery_splash: :class:`str` - The guild's discovery splash. - - .. versionadded:: 1.3 nsfw: :class:`bool` If the guild is marked as "not safe for work". @@ -175,15 +165,15 @@ class Guild(Hashable): .. versionadded:: 2.0 """ - __slots__ = ('afk_timeout', 'afk_channel', '_members', '_channels', 'icon', - 'name', 'id', 'unavailable', 'banner', 'region', '_state', + __slots__ = ('afk_timeout', 'afk_channel', '_members', '_channels', '_icon', + 'name', 'id', 'unavailable', '_banner', 'region', '_state', '_roles', '_member_count', '_large', 'owner_id', 'mfa_level', 'emojis', 'features', - 'verification_level', 'explicit_content_filter', 'splash', + 'verification_level', 'explicit_content_filter', '_splash', '_voice_states', '_system_channel_id', 'default_notifications', 'description', 'max_presences', 'max_members', 'max_video_channel_users', 'premium_tier', 'premium_subscription_count', '_system_channel_flags', - 'preferred_locale', 'discovery_splash', '_rules_channel_id', + 'preferred_locale', '_discovery_splash', '_rules_channel_id', '_public_updates_channel_id', 'nsfw') _PREMIUM_GUILD_LIMITS = { @@ -293,8 +283,8 @@ class Guild(Hashable): self.default_notifications = try_enum(NotificationLevel, guild.get('default_message_notifications')) self.explicit_content_filter = try_enum(ContentFilter, guild.get('explicit_content_filter', 0)) self.afk_timeout = guild.get('afk_timeout') - self.icon = guild.get('icon') - self.banner = guild.get('banner') + self._icon = guild.get('icon') + self._banner = guild.get('banner') self.unavailable = guild.get('unavailable', False) self.id = int(guild['id']) self._roles = {} @@ -306,7 +296,7 @@ class Guild(Hashable): self.mfa_level = guild.get('mfa_level') self.emojis = tuple(map(lambda d: state.store_emoji(self, d), guild.get('emojis', []))) self.features = guild.get('features', []) - self.splash = guild.get('splash') + self._splash = guild.get('splash') self._system_channel_id = utils._get_as_snowflake(guild, 'system_channel_id') self.description = guild.get('description') self.max_presences = guild.get('max_presences') @@ -316,7 +306,7 @@ class Guild(Hashable): self.premium_subscription_count = guild.get('premium_subscription_count') or 0 self._system_channel_flags = guild.get('system_channel_flags', 0) self.preferred_locale = guild.get('preferred_locale') - self.discovery_splash = guild.get('discovery_splash') + self._discovery_splash = guild.get('discovery_splash') self._rules_channel_id = utils._get_as_snowflake(guild, 'rules_channel_id') self._public_updates_channel_id = utils._get_as_snowflake(guild, 'public_updates_channel_id') self.nsfw = guild.get('nsfw', False) @@ -621,139 +611,32 @@ class Guild(Hashable): return self.get_member(self.owner_id) @property - def icon_url(self): - """:class:`Asset`: Returns the guild's icon asset.""" - return self.icon_url_as() - - def is_icon_animated(self): - """:class:`bool`: Returns True if the guild has an animated icon.""" - return bool(self.icon and self.icon.startswith('a_')) - - def icon_url_as(self, *, format=None, static_format='webp', size=1024): - """Returns an :class:`Asset` for the guild's icon. - - The format must be one of 'webp', 'jpeg', 'jpg', 'png' or 'gif', and - 'gif' is only valid for animated avatars. The size must be a power of 2 - between 16 and 4096. - - Parameters - ----------- - format: Optional[:class:`str`] - The format to attempt to convert the icon to. - If the format is ``None``, then it is automatically - detected into either 'gif' or static_format depending on the - icon being animated or not. - static_format: Optional[:class:`str`] - Format to attempt to convert only non-animated icons to. - size: :class:`int` - The size of the image to display. - - Raises - ------ - InvalidArgument - Bad image format passed to ``format`` or invalid ``size``. - - Returns - -------- - :class:`Asset` - The resulting CDN asset. - """ - return Asset._from_guild_icon(self._state, self, format=format, static_format=static_format, size=size) + def icon(self): + """Optional[:class:`Asset`]: Returns the guild's icon asset, if available.""" + if self._icon is None: + return None + return Asset._from_guild_icon(self._state, self.id, self._icon) @property - def banner_url(self): - """:class:`Asset`: Returns the guild's banner asset.""" - return self.banner_url_as() - - def banner_url_as(self, *, format='webp', size=2048): - """Returns an :class:`Asset` for the guild's banner. - - The format must be one of 'webp', 'jpeg', or 'png'. The - size must be a power of 2 between 16 and 4096. - - Parameters - ----------- - format: :class:`str` - The format to attempt to convert the banner to. - size: :class:`int` - The size of the image to display. - - Raises - ------ - InvalidArgument - Bad image format passed to ``format`` or invalid ``size``. - - Returns - -------- - :class:`Asset` - The resulting CDN asset. - """ - return Asset._from_guild_image(self._state, self.id, self.banner, 'banners', format=format, size=size) + def banner(self): + """Optional[:class:`Asset`]: Returns the guild's banner asset, if available.""" + if self._banner is None: + return None + return Asset._from_guild_image(self._state, self.id, self._banner, path='banners') @property - def splash_url(self): - """:class:`Asset`: Returns the guild's invite splash asset.""" - return self.splash_url_as() - - def splash_url_as(self, *, format='webp', size=2048): - """Returns an :class:`Asset` for the guild's invite splash. - - The format must be one of 'webp', 'jpeg', 'jpg', or 'png'. The - size must be a power of 2 between 16 and 4096. - - Parameters - ----------- - format: :class:`str` - The format to attempt to convert the splash to. - size: :class:`int` - The size of the image to display. - - Raises - ------ - InvalidArgument - Bad image format passed to ``format`` or invalid ``size``. - - Returns - -------- - :class:`Asset` - The resulting CDN asset. - """ - return Asset._from_guild_image(self._state, self.id, self.splash, 'splashes', format=format, size=size) + def splash(self): + """Optional[:class:`Asset`]: Returns the guild's invite splash asset, if available.""" + if self._splash is None: + return None + return Asset._from_guild_image(self._state, self.id, self._splash, path='splashes') @property - def discovery_splash_url(self): - """:class:`Asset`: Returns the guild's discovery splash asset. - - .. versionadded:: 1.3 - """ - return self.discovery_splash_url_as() - - def discovery_splash_url_as(self, *, format='webp', size=2048): - """Returns an :class:`Asset` for the guild's discovery splash. - - The format must be one of 'webp', 'jpeg', 'jpg', or 'png'. The - size must be a power of 2 between 16 and 4096. - - .. versionadded:: 1.3 - - Parameters - ----------- - format: :class:`str` - The format to attempt to convert the splash to. - size: :class:`int` - The size of the image to display. - - Raises - ------ - InvalidArgument - Bad image format passed to ``format`` or invalid ``size``. - - Returns - -------- - :class:`Asset` - The resulting CDN asset. - """ - return Asset._from_guild_image(self._state, self.id, self.discovery_splash, 'discovery-splashes', format=format, size=size) + def discovery_splash(self): + """Optional[:class:`Asset`]: Returns the guild's discovery splash asset, if available.""" + if self._discovery_splash is None: + return None + return Asset._from_guild_image(self._state, self.id, self._discovery_splash, path='discovery-splashes') @property def member_count(self): @@ -1185,7 +1068,7 @@ class Guild(Hashable): try: icon_bytes = fields['icon'] except KeyError: - icon = self.icon + icon = self._icon else: if icon_bytes is not None: icon = utils._bytes_to_base64_data(icon_bytes) @@ -1195,7 +1078,7 @@ class Guild(Hashable): try: banner_bytes = fields['banner'] except KeyError: - banner = self.banner + banner = self._banner else: if banner_bytes is not None: banner = utils._bytes_to_base64_data(banner_bytes) @@ -1212,7 +1095,7 @@ class Guild(Hashable): try: splash_bytes = fields['splash'] except KeyError: - splash = self.splash + splash = self._splash else: if splash_bytes is not None: splash = utils._bytes_to_base64_data(splash_bytes) |