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.
This commit is contained in:
179
discord/guild.py
179
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)
|
||||
|
||||
Reference in New Issue
Block a user