aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2019-06-04 19:04:44 -0400
committerRapptz <[email protected]>2019-06-04 19:04:44 -0400
commit9674055c2ac2c5385564775f82010fac76c790f1 (patch)
tree94084a0d66fbeaeae82c55cdc4a4a474d8ee089f
parentAdd support for new message types related to premium guilds. (diff)
downloaddiscord.py-9674055c2ac2c5385564775f82010fac76c790f1.tar.xz
discord.py-9674055c2ac2c5385564775f82010fac76c790f1.zip
Add support for animated guild icons.
-rw-r--r--discord/asset.py22
-rw-r--r--discord/guild.py22
-rw-r--r--discord/user.py2
3 files changed, 38 insertions, 8 deletions
diff --git a/discord/asset.py b/discord/asset.py
index affe7d59..42e2db4d 100644
--- a/discord/asset.py
+++ b/discord/asset.py
@@ -70,7 +70,7 @@ class Asset:
@classmethod
def _from_avatar(cls, state, user, *, format=None, static_format='webp', size=1024):
if not utils.valid_icon_size(size):
- raise InvalidArgument("size must be a power of 2 between 16 and 1024")
+ raise InvalidArgument("size must be a power of 2 between 16 and 4096")
if format is not None and format not in VALID_AVATAR_FORMATS:
raise InvalidArgument("format must be None or one of {}".format(VALID_AVATAR_FORMATS))
if format == "gif" and not user.is_avatar_animated():
@@ -107,6 +107,26 @@ class Asset:
url = 'https://cdn.discordapp.com/{key}/{0}/{1}.{2}?size={3}'
return cls(state, url.format(id, hash, format, size, key=key))
+ @classmethod
+ def _from_guild_icon(cls, state, guild, *, format=None, static_format='webp', size=1024):
+ if not utils.valid_icon_size(size):
+ raise InvalidArgument("size must be a power of 2 between 16 and 4096")
+ if format is not None and format not in VALID_AVATAR_FORMATS:
+ raise InvalidArgument("format must be one of {}".format(VALID_AVATAR_FORMATS))
+ if format == "gif" and not guild.is_icon_animated():
+ raise InvalidArgument("non animated guild icons do not support gif format")
+ if static_format not in VALID_STATIC_FORMATS:
+ raise InvalidArgument("static_format must be one of {}".format(VALID_STATIC_FORMATS))
+
+ if guild.icon is None:
+ return cls(state)
+
+ if format is None:
+ format = 'gif' if guild.is_icon_animated() else static_format
+
+ return cls(state, 'https://cdn.discordapp.com/icons/{0.id}/{0.icon}.{1}?size={2}'.format(guild, format, size))
+
+
def __str__(self):
return self._url if self._url is not None else ''
diff --git a/discord/guild.py b/discord/guild.py
index a6a86e73..c98cce2d 100644
--- a/discord/guild.py
+++ b/discord/guild.py
@@ -459,16 +459,26 @@ class Guild(Hashable):
""":class:`Asset`: Returns the guild's icon asset."""
return self.icon_url_as()
- def icon_url_as(self, *, format='webp', size=1024):
- """Returns a :class:`Asset`: for the guild's icon.
+ 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_'))
- The format must be one of 'webp', 'jpeg', 'jpg', or 'png'. The
- size must be a power of 2 between 16 and 4096.
+ def icon_url_as(self, *, format=None, static_format='webp', size=1024):
+ """Returns a :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: :class:`str`
+ 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.
@@ -482,7 +492,7 @@ class Guild(Hashable):
:class:`Asset`
The resulting CDN asset.
"""
- return Asset._from_guild_image(self._state, self.id, self.icon, 'icons', format=format, size=size)
+ return Asset._from_guild_icon(self._state, self, format=format, static_format=static_format, size=size)
@property
def banner_url(self):
diff --git a/discord/user.py b/discord/user.py
index 3867c95f..09b1f753 100644
--- a/discord/user.py
+++ b/discord/user.py
@@ -136,7 +136,7 @@ class BaseUser(_BaseUser):
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 1024.
+ between 16 and 4096.
Parameters
-----------