aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/appinfo.py66
-rw-r--r--discord/asset.py18
-rw-r--r--discord/channel.py35
-rw-r--r--discord/team.py35
4 files changed, 144 insertions, 10 deletions
diff --git a/discord/appinfo.py b/discord/appinfo.py
index 0a15e1e1..4ff76d39 100644
--- a/discord/appinfo.py
+++ b/discord/appinfo.py
@@ -131,17 +131,79 @@ class AppInfo:
def icon_url(self):
""":class:`.Asset`: Retrieves the application's icon asset.
+ This is equivalent to calling :meth:`icon_url_as` with
+ the default parameters ('webp' format and a size of 1024).
+
.. versionadded:: 1.3
"""
- return Asset._from_icon(self._state, self, 'app')
+ return self.icon_url_as()
+
+ def icon_url_as(self, *, format='webp', size=1024):
+ """Returns an :class:`Asset` for the icon the application has.
+
+ 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.6
+
+ Parameters
+ -----------
+ format: :class:`str`
+ The format to attempt to convert the icon to. Defaults to 'webp'.
+ 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_icon(self._state, self, 'app', format=format, size=size)
+
@property
def cover_image_url(self):
""":class:`.Asset`: Retrieves the cover image on a store embed.
+ This is equivalent to calling :meth:`cover_image_url_as` with
+ the default parameters ('webp' format and a size of 1024).
+
.. versionadded:: 1.3
"""
- return Asset._from_cover_image(self._state, self)
+ return self.cover_image_url_as()
+
+ def cover_image_url_as(self, *, format='webp', size=1024):
+ """Returns an :class:`Asset` for the image on store embeds
+ if this application is a game sold on Discord.
+
+ 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.6
+
+ Parameters
+ -----------
+ format: :class:`str`
+ The format to attempt to convert the image to. Defaults to 'webp'.
+ 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_cover_image(self._state, self, format=format, size=size)
@property
def guild(self):
diff --git a/discord/asset.py b/discord/asset.py
index 349c42a4..f5c5eddc 100644
--- a/discord/asset.py
+++ b/discord/asset.py
@@ -89,19 +89,29 @@ class Asset:
return cls(state, '/avatars/{0.id}/{0.avatar}.{1}?size={2}'.format(user, format, size))
@classmethod
- def _from_icon(cls, state, object, path):
+ def _from_icon(cls, state, object, path, *, format='webp', size=1024):
if object.icon is None:
return cls(state)
- url = '/{0}-icons/{1.id}/{1.icon}.jpg'.format(path, object)
+ if not utils.valid_icon_size(size):
+ raise InvalidArgument("size must be a power of 2 between 16 and 4096")
+ if format not in VALID_STATIC_FORMATS:
+ raise InvalidArgument("format must be None or one of {}".format(VALID_STATIC_FORMATS))
+
+ url = '/{0}-icons/{1.id}/{1.icon}.{2}?size={3}'.format(path, object, format, size)
return cls(state, url)
@classmethod
- def _from_cover_image(cls, state, obj):
+ def _from_cover_image(cls, state, obj, *, format='webp', size=1024):
if obj.cover_image is None:
return cls(state)
- url = '/app-assets/{0.id}/store/{0.cover_image}.jpg'.format(obj)
+ if not utils.valid_icon_size(size):
+ raise InvalidArgument("size must be a power of 2 between 16 and 4096")
+ if format not in VALID_STATIC_FORMATS:
+ raise InvalidArgument("format must be None or one of {}".format(VALID_STATIC_FORMATS))
+
+ url = '/app-assets/{0.id}/store/{0.cover_image}.{1}?size={2}'.format(obj, format, size)
return cls(state, url)
@classmethod
diff --git a/discord/channel.py b/discord/channel.py
index c3ccbe0f..7568b404 100644
--- a/discord/channel.py
+++ b/discord/channel.py
@@ -1154,8 +1154,39 @@ class GroupChannel(discord.abc.Messageable, Hashable):
@property
def icon_url(self):
- """:class:`Asset`: Returns the channel's icon asset if available."""
- return Asset._from_icon(self._state, self, 'channel')
+ """:class:`Asset`: Returns the channel's icon asset if available.
+
+ This is equivalent to calling :meth:`icon_url_as` with
+ the default parameters ('webp' format and a size of 1024).
+ """
+ return self.icon_url_as()
+
+ def icon_url_as(self, *, format='webp', size=1024):
+ """Returns an :class:`Asset` for the icon the channel has.
+
+ The format must be one of 'webp', 'jpeg', 'jpg' or 'png'.
+ The size must be a power of 2 between 16 and 4096.
+
+ .. versionadded:: 2.0
+
+ Parameters
+ -----------
+ format: :class:`str`
+ The format to attempt to convert the icon to. Defaults to 'webp'.
+ 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_icon(self._state, self, 'channel', format=format, size=size)
@property
def created_at(self):
diff --git a/discord/team.py b/discord/team.py
index 0afb6458..94b00a2e 100644
--- a/discord/team.py
+++ b/discord/team.py
@@ -68,8 +68,39 @@ class Team:
@property
def icon_url(self):
- """:class:`.Asset`: Retrieves the team's icon asset."""
- return Asset._from_icon(self._state, self, 'team')
+ """:class:`.Asset`: Retrieves the team's icon asset.
+
+ This is equivalent to calling :meth:`icon_url_as` with
+ the default parameters ('webp' format and a size of 1024).
+ """
+ return self.icon_url_as()
+
+ def icon_url_as(self, *, format='None', size=1024):
+ """Returns an :class:`Asset` for the icon the team has.
+
+ The format must be one of 'webp', 'jpeg', 'jpg' or 'png'.
+ The size must be a power of 2 between 16 and 4096.
+
+ .. versionadded:: 2.0
+
+ Parameters
+ -----------
+ format: :class:`str`
+ The format to attempt to convert the icon to. Defaults to 'webp'.
+ 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_icon(self._state, self, 'team', format=format, size=size)
@property
def owner(self):