Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ These changes are available on the `master` branch, but have not yet been releas

### Added

- Added `Member.display_banner` method.
([#2556](https://github.com/Pycord-Development/pycord/pull/2556))
- Added `Guild.fetch_role` method.
([#2528](https://github.com/Pycord-Development/pycord/pull/2528))

Expand Down
13 changes: 13 additions & 0 deletions discord/asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,19 @@ def _from_guild_avatar(
animated=animated,
)

@classmethod
def _from_guild_banner(
cls, state, guild_id: int, member_id: int, banner: str
) -> Asset:
animated: bool = banner.startswith("a_")
format: str = "gif" if animated else "png"
return cls(
state,
url=f"{cls.BASE}/guilds/{guild_id}/users/{member_id}/banners/{banner}.{format}?size=1024",
key=banner,
animated=animated,
)

@classmethod
def _from_icon(cls, state, object_id: int, icon_hash: str, path: str) -> Asset:
return cls(
Expand Down
26 changes: 26 additions & 0 deletions discord/member.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ class Member(discord.abc.Messageable, _UserTag):
mutual_guilds: list[Guild]
public_flags: PublicUserFlags
banner: Asset | None
display_banner: Asset | None
accent_color: Colour | None
accent_colour: Colour | None
communication_disabled_until: datetime.datetime | None
Expand Down Expand Up @@ -603,6 +604,31 @@ def guild_avatar(self) -> Asset | None:
self._state, self.guild.id, self.id, self._avatar
)

@property
def display_banner(self) -> Asset | None:
"""Returns the member's display banner.

For regular members this is just their banner, but
if they have a guild specific banner then that
is returned instead.

.. versionadded:: 2.7
"""
return self.guild_banner or self._user.banner

@property
def guild_banner(self) -> Asset | None:
"""Returns an :class:`Asset` for the guild banner
the member has. If unavailable, ``None`` is returned.

.. versionadded:: 2.7
"""
if self._user.banner is None:
return None
return Asset._from_guild_banner(
self._state, self.guild.id, self.id, self._user.banner
)

@property
def activity(self) -> ActivityTypes | None:
"""Returns the primary
Expand Down