diff --git a/interactions/models/discord/user.py b/interactions/models/discord/user.py index 0ac24ba35..1b2b02933 100644 --- a/interactions/models/discord/user.py +++ b/interactions/models/discord/user.py @@ -328,6 +328,9 @@ class Member(DiscordObject, _SendDMMixin): metadata=docs("Whether the user has **not** passed guild's membership screening requirements"), ) guild_avatar: "Asset" = attrs.field(repr=False, default=None, metadata=docs("The user's guild avatar")) + guild_banner: Optional["Asset"] = attrs.field( + repr=False, default=None, metadata=docs("The user's guild banner, if any") + ) communication_disabled_until: Optional["Timestamp"] = attrs.field( default=None, converter=optional_c(timestamp_converter), @@ -372,6 +375,12 @@ def _process_dict(cls, data: Dict[str, Any], client: "Client") -> Dict[str, Any] f"[DEBUG NEEDED - REPORT THIS] Incomplete dictionary has been passed to member object: {e}" ) raise + if data.get("banner"): + data["guild_banner"] = Asset.from_path_hash( + client, + f"guilds/{data['guild_id']}/users/{data['id']}/banners/{{}}", + data.pop("banner", None), + ) data["role_ids"] = data.pop("roles", []) @@ -440,6 +449,11 @@ def avatar_url(self) -> str: """The users avatar url.""" return self.display_avatar.url + @property + def banner(self) -> Optional["Asset"]: + """The user's banner, if any, will return `guild_banner` if one is set, otherwise will return user banner.""" + return self.guild_banner or self.user.banner + @property def premium(self) -> bool: """Is this member a server booster?""" diff --git a/interactions/models/discord/user.pyi b/interactions/models/discord/user.pyi index c0dfdece9..7fec74e2a 100644 --- a/interactions/models/discord/user.pyi +++ b/interactions/models/discord/user.pyi @@ -116,6 +116,7 @@ class Member(FakeUserMixin): premium_since: Optional["Timestamp"] pending: Optional[bool] guild_avatar: Asset + guild_banner: Optional[Asset] communication_disabled_until: Optional["Timestamp"] _guild_id: Snowflake_Type _role_ids: List["Snowflake_Type"] @@ -143,6 +144,8 @@ class Member(FakeUserMixin): @property def avatar_url(self) -> str: ... @property + def banner(self) -> Optional[Asset]: ... + @property def premium(self) -> bool: ... @property def guild_permissions(self) -> Permissions: ...