From 0dbceec58d87ffb0c809d7420ae83014e8194529 Mon Sep 17 00:00:00 2001 From: UK <41271523+NeloBlivion@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:12:29 +0100 Subject: [PATCH 1/9] Add Avatar Decorations --- discord/asset.py | 10 ++++++++++ discord/user.py | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/discord/asset.py b/discord/asset.py index fc11f89b72..c6bf4b00ca 100644 --- a/discord/asset.py +++ b/discord/asset.py @@ -182,6 +182,16 @@ def _from_avatar(cls, state, user_id: int, avatar: str) -> Asset: animated=animated, ) + @classmethod + def _from_avatar_decoration(cls, state, user_id: int, avatar_decoration: str) -> Self: + animated = avatar_decoration.startswith("a_") + return cls( + state, + url=f"{cls.BASE}/avatar-decorations/{user_id}/{avatar_decoration}.png?size=1024", + key=avatar_decoration, + animated=animated, + ) + @classmethod def _from_guild_avatar( cls, state, guild_id: int, member_id: int, avatar: str diff --git a/discord/user.py b/discord/user.py index 319ec04876..f4bb324e77 100644 --- a/discord/user.py +++ b/discord/user.py @@ -70,6 +70,7 @@ class BaseUser(_UserTag): "bot", "system", "_public_flags", + "_avatar_decoration", "_state", ) @@ -84,6 +85,7 @@ class BaseUser(_UserTag): _avatar: str | None _banner: str | None _accent_colour: int | None + _avatar_decoration: str | None _public_flags: int def __init__(self, *, state: ConnectionState, data: UserPayload) -> None: @@ -137,6 +139,7 @@ def _update(self, data: UserPayload) -> None: self._avatar = data["avatar"] self._banner = data.get("banner", None) self._accent_colour = data.get("accent_color", None) + self._avatar_decoration = data.get("avatar_decoration", None) self._public_flags = data.get("public_flags", 0) self.bot = data.get("bot", False) self.system = data.get("system", False) @@ -152,6 +155,7 @@ def _copy(cls: type[BU], user: BU) -> BU: self._avatar = user._avatar self._banner = user._banner self._accent_colour = user._accent_colour + self._avatar_decoration = user._avatar_decoration self.bot = user.bot self._state = user._state self._public_flags = user._public_flags @@ -224,6 +228,19 @@ def banner(self) -> Asset | None: return None return Asset._from_user_banner(self._state, self.id, self._banner) + @property + def avatar_decoration(self) -> Asset | None: + """Returns the user's avatar decoration, if available. + + .. versionadded:: 2.5 + + .. note:: + This information is only available via :meth:`Client.fetch_user`. + """ + if self._avatar_decoration is None: + return None + return Asset._from_avatar_decoration(self._state, self.id, self._avatar_decoration) + @property def accent_colour(self) -> Colour | None: """Returns the user's accent colour, if applicable. From bd5dbb48db7972e5be5f601fde6e215a6b957acf Mon Sep 17 00:00:00 2001 From: UK <41271523+NeloBlivion@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:19:19 +0100 Subject: [PATCH 2/9] remove fetch note? --- discord/user.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/discord/user.py b/discord/user.py index f4bb324e77..a74aa1bf63 100644 --- a/discord/user.py +++ b/discord/user.py @@ -233,9 +233,6 @@ def avatar_decoration(self) -> Asset | None: """Returns the user's avatar decoration, if available. .. versionadded:: 2.5 - - .. note:: - This information is only available via :meth:`Client.fetch_user`. """ if self._avatar_decoration is None: return None From effd954d64b9a4d363da32e0223dda95eb9c8ca9 Mon Sep 17 00:00:00 2001 From: UK <41271523+NeloBlivion@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:31:50 +0100 Subject: [PATCH 3/9] adjust endpoint --- discord/asset.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/discord/asset.py b/discord/asset.py index c6bf4b00ca..0d6189ddff 100644 --- a/discord/asset.py +++ b/discord/asset.py @@ -185,9 +185,14 @@ def _from_avatar(cls, state, user_id: int, avatar: str) -> Asset: @classmethod def _from_avatar_decoration(cls, state, user_id: int, avatar_decoration: str) -> Self: animated = avatar_decoration.startswith("a_") + endpoint = ( + "avatar-decoration-presets" + if avatar_decoration.startswith(("v3", "v2")) + else "avatar-decorations/{user_id}" + ) return cls( state, - url=f"{cls.BASE}/avatar-decorations/{user_id}/{avatar_decoration}.png?size=1024", + url=f"{cls.BASE}/{endpoint}/{avatar_decoration}.png?size=1024", key=avatar_decoration, animated=animated, ) From a36e18cb715ce6ccc83863e1aaddb8714b33be9c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 18 Jun 2023 12:33:52 +0000 Subject: [PATCH 4/9] style(pre-commit): auto fixes from pre-commit.com hooks --- discord/asset.py | 6 ++++-- discord/user.py | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/discord/asset.py b/discord/asset.py index 0d6189ddff..5a7a34d249 100644 --- a/discord/asset.py +++ b/discord/asset.py @@ -183,11 +183,13 @@ def _from_avatar(cls, state, user_id: int, avatar: str) -> Asset: ) @classmethod - def _from_avatar_decoration(cls, state, user_id: int, avatar_decoration: str) -> Self: + def _from_avatar_decoration( + cls, state, user_id: int, avatar_decoration: str + ) -> Self: animated = avatar_decoration.startswith("a_") endpoint = ( "avatar-decoration-presets" - if avatar_decoration.startswith(("v3", "v2")) + if avatar_decoration.startswith(("v3", "v2")) else "avatar-decorations/{user_id}" ) return cls( diff --git a/discord/user.py b/discord/user.py index a74aa1bf63..5a6fcea654 100644 --- a/discord/user.py +++ b/discord/user.py @@ -236,7 +236,9 @@ def avatar_decoration(self) -> Asset | None: """ if self._avatar_decoration is None: return None - return Asset._from_avatar_decoration(self._state, self.id, self._avatar_decoration) + return Asset._from_avatar_decoration( + self._state, self.id, self._avatar_decoration + ) @property def accent_colour(self) -> Colour | None: From 661e2d3ba025547645b557d398511cb327d80ea6 Mon Sep 17 00:00:00 2001 From: UK <41271523+NeloBlivion@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:38:47 +0100 Subject: [PATCH 5/9] fix return type --- discord/asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discord/asset.py b/discord/asset.py index 5a7a34d249..cffd8cd46d 100644 --- a/discord/asset.py +++ b/discord/asset.py @@ -185,7 +185,7 @@ def _from_avatar(cls, state, user_id: int, avatar: str) -> Asset: @classmethod def _from_avatar_decoration( cls, state, user_id: int, avatar_decoration: str - ) -> Self: + ) -> Asset: animated = avatar_decoration.startswith("a_") endpoint = ( "avatar-decoration-presets" From e1921724de980fa539b216dd1694d1a5a3c161cb Mon Sep 17 00:00:00 2001 From: UK <41271523+NeloBlivion@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:39:43 +0100 Subject: [PATCH 6/9] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb7bb88942..b70cbf3733 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,8 @@ These changes are available on the `master` branch, but have not yet been releas ([#2106](https://github.com/Pycord-Development/pycord/pull/2106)) - Added Annotated forms support for typehinting slash command options. ([#2124](https://github.com/Pycord-Development/pycord/pull/2124)) +- Added `User.avatar_decoration`. + ([#2131](https://github.com/Pycord-Development/pycord/pull/2131)) ### Changed From fe0d2f79e945fd2ad8a5a309fe8e0ae33438d058 Mon Sep 17 00:00:00 2001 From: UK <41271523+NeloBlivion@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:58:06 +0100 Subject: [PATCH 7/9] forgot fstring --- discord/asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discord/asset.py b/discord/asset.py index cffd8cd46d..9e9d8712f8 100644 --- a/discord/asset.py +++ b/discord/asset.py @@ -190,7 +190,7 @@ def _from_avatar_decoration( endpoint = ( "avatar-decoration-presets" if avatar_decoration.startswith(("v3", "v2")) - else "avatar-decorations/{user_id}" + else f"avatar-decorations/{user_id}" ) return cls( state, From 4558140b2ee6e2c26b70fdc547ea34385c5b9076 Mon Sep 17 00:00:00 2001 From: UK <41271523+NeloBlivion@users.noreply.github.com> Date: Wed, 31 Jan 2024 18:39:05 +0000 Subject: [PATCH 8/9] update decoration method --- discord/asset.py | 4 ++-- discord/user.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/discord/asset.py b/discord/asset.py index 9e9d8712f8..103bc4ba7e 100644 --- a/discord/asset.py +++ b/discord/asset.py @@ -189,8 +189,8 @@ def _from_avatar_decoration( animated = avatar_decoration.startswith("a_") endpoint = ( "avatar-decoration-presets" - if avatar_decoration.startswith(("v3", "v2")) - else f"avatar-decorations/{user_id}" + # if avatar_decoration.startswith(("v3", "v2")) + # else f"avatar-decorations/{user_id}" ) return cls( state, diff --git a/discord/user.py b/discord/user.py index 11b06c8e22..7e013a081e 100644 --- a/discord/user.py +++ b/discord/user.py @@ -85,7 +85,7 @@ class BaseUser(_UserTag): _avatar: str | None _banner: str | None _accent_colour: int | None - _avatar_decoration: str | None + _avatar_decoration: dict | None _public_flags: int def __init__(self, *, state: ConnectionState, data: UserPayload) -> None: @@ -136,7 +136,7 @@ def _update(self, data: UserPayload) -> None: self._avatar = data["avatar"] self._banner = data.get("banner", None) self._accent_colour = data.get("accent_color", None) - self._avatar_decoration = data.get("avatar_decoration", None) + self._avatar_decoration = data.get("avatar_decoration_data", None) self._public_flags = data.get("public_flags", 0) self.bot = data.get("bot", False) self.system = data.get("system", False) @@ -234,7 +234,7 @@ def avatar_decoration(self) -> Asset | None: if self._avatar_decoration is None: return None return Asset._from_avatar_decoration( - self._state, self.id, self._avatar_decoration + self._state, self.id, self._avatar_decoration.get('asset') ) @property From 9b65cdcad350257c860e8e62803f094718e6b194 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 31 Jan 2024 18:39:28 +0000 Subject: [PATCH 9/9] style(pre-commit): auto fixes from pre-commit.com hooks --- discord/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discord/user.py b/discord/user.py index 7e013a081e..b1aecee370 100644 --- a/discord/user.py +++ b/discord/user.py @@ -234,7 +234,7 @@ def avatar_decoration(self) -> Asset | None: if self._avatar_decoration is None: return None return Asset._from_avatar_decoration( - self._state, self.id, self._avatar_decoration.get('asset') + self._state, self.id, self._avatar_decoration.get("asset") ) @property