aboutsummaryrefslogtreecommitdiff
path: root/discord/webhook
diff options
context:
space:
mode:
authorRapptz <[email protected]>2021-04-16 11:21:13 -0400
committerRapptz <[email protected]>2021-04-16 11:27:23 -0400
commit9eaf1e85e4e987b5f874a7ba4c3ed13de10fd154 (patch)
tree83a60b0aaff3c1b63868631418cb7583adda054d /discord/webhook
parentAdd `fetch_message` for webhooks (diff)
downloaddiscord.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/webhook')
-rw-r--r--discord/webhook/async_.py104
1 files changed, 14 insertions, 90 deletions
diff --git a/discord/webhook/async_.py b/discord/webhook/async_.py
index aadc752c..807eb1a0 100644
--- a/discord/webhook/async_.py
+++ b/discord/webhook/async_.py
@@ -475,56 +475,23 @@ class PartialWebhookGuild(Hashable):
The partial guild's icon
"""
- __slots__ = ('id', 'name', 'icon', '_state')
+ __slots__ = ('id', 'name', '_icon', '_state')
def __init__(self, *, data, state):
self._state = state
self.id = int(data['id'])
self.name = data['name']
- self.icon = data['icon']
+ self._icon = data['icon']
def __repr__(self):
return f'<PartialWebhookGuild name={self.name!r} id={self.id}>'
@property
- def icon_url(self) -> Asset:
- """:class:`Asset`: Returns the guild's icon asset."""
- return self.icon_url_as()
-
- def is_icon_animated(self) -> bool:
- """: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_url(self) -> Optional[Asset]:
+ """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)
class _FriendlyHttpAttributeErrorHelper:
@@ -684,7 +651,7 @@ class BaseWebhook(Hashable):
'auth_token',
'user',
'name',
- 'avatar',
+ '_avatar',
'source_channel',
'source_guild',
'_state',
@@ -701,7 +668,7 @@ class BaseWebhook(Hashable):
self.channel_id = utils._get_as_snowflake(data, 'channel_id')
self.guild_id = utils._get_as_snowflake(data, 'guild_id')
self.name = data.get('name')
- self.avatar = data.get('avatar')
+ self._avatar = data.get('avatar')
self.token = data.get('token')
user = data.get('user')
@@ -755,59 +722,16 @@ class BaseWebhook(Hashable):
return utils.snowflake_time(self.id)
@property
- def avatar_url(self) -> Asset:
+ def avatar(self) -> Asset:
""":class:`Asset`: Returns an :class:`Asset` for the avatar the webhook has.
If the webhook does not have a traditional avatar, an asset for
the default avatar is returned instead.
-
- This is equivalent to calling :meth:`avatar_url_as` with the
- default parameters.
- """
- return self.avatar_url_as()
-
- def avatar_url_as(self, *, format: Optional[Literal['png', 'jpg', 'jpeg']] = None, size: int = 1024) -> Asset:
- """Returns an :class:`Asset` for the avatar the webhook has.
-
- If the webhook does not have a traditional avatar, an asset for
- the default avatar is returned instead.
-
- The format must be one of 'jpeg', 'jpg', or 'png'.
- The size must be a power of 2 between 16 and 1024.
-
- Parameters
- -----------
- format: Optional[:class:`str`]
- The format to attempt to convert the avatar to.
- If the format is ``None``, then it is equivalent to png.
- 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.
"""
- if self.avatar is None:
+ if self._avatar is None:
# Default is always blurple apparently
- return Asset(self._state, '/embed/avatars/0.png')
-
- if not utils.valid_icon_size(size):
- raise InvalidArgument("size must be a power of 2 between 16 and 1024")
-
- format = format or 'png'
-
- if format not in ('png', 'jpg', 'jpeg'):
- raise InvalidArgument("format must be one of 'png', 'jpg', or 'jpeg'.")
-
- url = f'/avatars/{self.id}/{self.avatar}.{format}?size={size}'
- return Asset(self._state, url)
-
+ return Asset._from_default_avatar(self._state, 0)
+ return Asset._from_avatar(self._state, self.id, self._avatar)
class Webhook(BaseWebhook):
"""Represents an asynchronous Discord webhook.
@@ -980,7 +904,7 @@ class Webhook(BaseWebhook):
'name': name,
'channel_id': channel.id,
'guild_id': channel.guild.id,
- 'user': {'username': user.name, 'discriminator': user.discriminator, 'id': user.id, 'avatar': user.avatar},
+ 'user': {'username': user.name, 'discriminator': user.discriminator, 'id': user.id, 'avatar': user._avatar},
}
state = channel._state