aboutsummaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
Diffstat (limited to 'discord')
-rw-r--r--discord/asset.py11
-rw-r--r--discord/user.py52
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`.