diff options
Diffstat (limited to 'discord')
| -rw-r--r-- | discord/asset.py | 11 | ||||
| -rw-r--r-- | discord/user.py | 52 |
2 files changed, 61 insertions, 2 deletions
diff --git a/discord/asset.py b/discord/asset.py index e8381189..eafff466 100644 --- a/discord/asset.py +++ b/discord/asset.py @@ -224,6 +224,17 @@ class Asset(AssetMixin): animated=False, ) + @classmethod + def _from_user_banner(cls, state, user_id: int, banner_hash: str) -> Asset: + animated = banner_hash.startswith('a_') + format = 'gif' if animated else 'png' + return cls( + state, + url=f'{cls.BASE}/banners/{user_id}/{banner_hash}.{format}?size=512', + key=banner_hash, + animated=animated + ) + def __str__(self) -> str: return self._url diff --git a/discord/user.py b/discord/user.py index 261eea87..d0a3960a 100644 --- a/discord/user.py +++ b/discord/user.py @@ -41,8 +41,8 @@ class _UserTag: id: int -class BaseUser(_UserTag): - __slots__ = ('name', 'id', 'discriminator', '_avatar', 'bot', 'system', '_public_flags', '_state') +class BaseUser(_BaseUser): + __slots__ = ('name', 'id', 'discriminator', '_avatar', '_banner', '_accent_colour', 'bot', 'system', '_public_flags', '_state') if TYPE_CHECKING: name: str @@ -78,6 +78,8 @@ class BaseUser(_UserTag): self.id = int(data['id']) self.discriminator = data['discriminator'] self._avatar = data['avatar'] + self._banner = data.get('banner', None) + self._accent_colour = data.get('accent_color', None) self._public_flags = data.get('public_flags', 0) self.bot = data.get('bot', False) self.system = data.get('system', False) @@ -90,6 +92,8 @@ class BaseUser(_UserTag): self.id = user.id self.discriminator = user.discriminator self._avatar = user._avatar + self._banner = user._banner + self._accent_colour = user._accent_colour self.bot = user.bot self._state = user._state self._public_flags = user._public_flags @@ -128,6 +132,50 @@ class BaseUser(_UserTag): return Asset._from_default_avatar(self._state, int(self.discriminator) % len(DefaultAvatar)) @property + def banner(self) -> Optional[Asset]: + """Optional[:class:`Asset`]: Returns the user's banner asset, if available. + + .. versionadded:: 2.0 + + + .. note:: + This information is only available via :meth:`Client.fetch_user`. + """ + if self._banner is None: + return None + return Asset._from_user_banner(self._state, self.id, self._banner) + + @property + def accent_colour(self) -> Optional[Colour]: + """Optional[:class:`Colour`]: Returns the user's accent colour, if applicable. + + There is an alias for this named :attr:`accent_color`. + + .. versionadded:: 2.0 + + .. note:: + + This information is only available via :meth:`Client.fetch_user`. + """ + if self._accent_color is None: + return None + return Colour(self._accent_color) + + @property + def accent_color(self) -> Optional[Colour]: + """Optional[:class:`Colour`]: Returns the user's accent color, if applicable. + + There is an alias for this named :attr:`accent_colour`. + + .. versionadded:: 2.0 + + .. note:: + + This information is only available via :meth:`Client.fetch_user`. + """ + return self.accent_colour + + @property def colour(self): """:class:`Colour`: A property that returns a colour denoting the rendered colour for the user. This always returns :meth:`Colour.default`. |