diff options
| author | SnowyLuma <[email protected]> | 2019-03-09 05:48:23 +0100 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2019-03-09 00:37:49 -0500 |
| commit | 42a7c4f7e5caa7baf555e86b52249419ce33acfc (patch) | |
| tree | 38fa7c675438069fa74b439a551ba36aa0bc521c /discord/guild.py | |
| parent | Add support for guild descriptions (diff) | |
| download | discord.py-42a7c4f7e5caa7baf555e86b52249419ce33acfc.tar.xz discord.py-42a7c4f7e5caa7baf555e86b52249419ce33acfc.zip | |
Add support for guild banners
Document banner attribute of Guild and Invite
Update discord/utils.py
Co-Authored-By: SnowyLuma <[email protected]>
Diffstat (limited to 'discord/guild.py')
| -rw-r--r-- | discord/guild.py | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/discord/guild.py b/discord/guild.py index 122ebb0f..194f54e0 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -95,6 +95,8 @@ class Guild(Hashable): all be None. It is best to not do anything with the guild if it is unavailable. Check the :func:`on_guild_unavailable` and :func:`on_guild_available` events. + banner: Optional[:class:`str`] + The guild's banner. mfa_level: :class:`int` Indicates the guild's two factor authorisation level. If this value is 0 then the guild does not require 2FA for their administrative members. If the value is @@ -119,7 +121,7 @@ class Guild(Hashable): """ __slots__ = ('afk_timeout', 'afk_channel', '_members', '_channels', 'icon', - 'name', 'id', 'unavailable', 'name', 'region', '_state', + 'name', 'id', 'unavailable', 'banner', 'region', '_state', '_default_role', '_roles', '_member_count', '_large', 'owner_id', 'mfa_level', 'emojis', 'features', 'verification_level', 'explicit_content_filter', 'splash', @@ -211,6 +213,7 @@ class Guild(Hashable): 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.unavailable = guild.get('unavailable', False) self.id = int(guild['id']) self._roles = {} @@ -409,7 +412,7 @@ class Guild(Hashable): """Returns a friendly URL version of the guild's icon. Returns an empty string if it has no icon. The format must be one of 'webp', 'jpeg', 'jpg', or 'png'. The - size must be a power of 2 between 16 and 2048. + size must be a power of 2 between 16 and 4096. Parameters ----------- @@ -429,7 +432,7 @@ class Guild(Hashable): Bad image format passed to ``format`` or invalid ``size``. """ if not valid_icon_size(size): - raise InvalidArgument("size must be a power of 2 between 16 and 2048") + raise InvalidArgument("size must be a power of 2 between 16 and 4096") if format not in VALID_ICON_FORMATS: raise InvalidArgument("format must be one of {}".format(VALID_ICON_FORMATS)) @@ -439,6 +442,44 @@ class Guild(Hashable): return 'https://cdn.discordapp.com/icons/{0.id}/{0.icon}.{1}?size={2}'.format(self, format, size) @property + def banner_url(self): + """Returns the URL version of the guild's banner. Returns an empty string if it has no banner.""" + return self.banner_url_as() + + def banner_url_as(self, *, format='webp', size=2048): + """Returns a friendly URL version of the guild's banner. Returns an empty string if it has no 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: str + The format to attempt to convert the banner to. + size: int + The size of the image to display. + + Returns + -------- + str + The resulting CDN URL. + + Raises + ------ + InvalidArgument + Bad image format passed to ``format`` or invalid ``size``. + """ + if not valid_icon_size(size): + raise InvalidArgument("size must be a power of 2 between 16 and 4096") + if format not in VALID_ICON_FORMATS: + raise InvalidArgument("format must be one of {}".format(VALID_ICON_FORMATS)) + + if self.banner is None: + return '' + + return 'https://cdn.discordapp.com/banners/{0.id}/{0.banner}.{1}?size={2}'.format(self, format, size) + + @property def splash_url(self): """Returns the URL version of the guild's invite splash. Returns an empty string if it has no splash.""" return self.splash_url_as() @@ -447,7 +488,7 @@ class Guild(Hashable): """Returns a friendly URL version of the guild's invite splash. Returns an empty string if it has no splash. The format must be one of 'webp', 'jpeg', 'jpg', or 'png'. The - size must be a power of 2 between 16 and 2048. + size must be a power of 2 between 16 and 4096. Parameters ----------- @@ -467,7 +508,7 @@ class Guild(Hashable): Bad image format passed to ``format`` or invalid ``size``. """ if not valid_icon_size(size): - raise InvalidArgument("size must be a power of 2 between 16 and 2048") + raise InvalidArgument("size must be a power of 2 between 16 and 4096") if format not in VALID_ICON_FORMATS: raise InvalidArgument("format must be one of {}".format(VALID_ICON_FORMATS)) @@ -764,6 +805,9 @@ class Guild(Hashable): icon: bytes A :term:`py:bytes-like object` representing the icon. Only PNG/JPEG supported. Could be ``None`` to denote removal of the icon. + banner: bytes + A :term:`py:bytes-like object` representing the banner. + Could be ``None`` to denote removal of the banner. splash: bytes A :term:`py:bytes-like object` representing the invite splash. Only PNG/JPEG supported. Could be ``None`` to denote removing the @@ -815,6 +859,16 @@ class Guild(Hashable): icon = None try: + banner_bytes = fields['banner'] + except KeyError: + banner = self.banner + else: + if banner_bytes is not None: + banner = utils._bytes_to_base64_data(banner_bytes) + else: + banner = None + + try: vanity_code = fields['vanity_code'] except KeyError: pass @@ -832,6 +886,7 @@ class Guild(Hashable): splash = None fields['icon'] = icon + fields['banner'] = banner fields['splash'] = splash try: |