Skip to content

Commit 7f2beb7

Browse files
MattyTheHackerpre-commit-ci[bot]LulalabyDorukyumyoggys
authored
feat: Member.display_banner (#2556)
Signed-off-by: Matty Widdop <[email protected]> Signed-off-by: Lala Sabathil <[email protected]> Signed-off-by: Dorukyum <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Lala Sabathil <[email protected]> Co-authored-by: Dorukyum <[email protected]> Co-authored-by: Lala Sabathil <[email protected]> Co-authored-by: YoggieS <[email protected]> Co-authored-by: plun1331 <[email protected]>
1 parent 2136691 commit 7f2beb7

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ These changes are available on the `master` branch, but have not yet been releas
2424

2525
- Added `Guild.fetch_role` method.
2626
([#2528](https://github.com/Pycord-Development/pycord/pull/2528))
27+
- Added `Member.guild_banner` and `Member.display_banner` properties.
28+
([#2556](https://github.com/Pycord-Development/pycord/pull/2556))
2729

2830
### Fixed
2931

discord/asset.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,19 @@ def _from_guild_avatar(
212212
animated=animated,
213213
)
214214

215+
@classmethod
216+
def _from_guild_banner(
217+
cls, state, guild_id: int, member_id: int, banner: str
218+
) -> Asset:
219+
animated = banner.startswith("a_")
220+
format = "gif" if animated else "png"
221+
return cls(
222+
state,
223+
url=f"{cls.BASE}/guilds/{guild_id}/users/{member_id}/banners/{banner}.{format}?size=512",
224+
key=banner,
225+
animated=animated,
226+
)
227+
215228
@classmethod
216229
def _from_icon(cls, state, object_id: int, icon_hash: str, path: str) -> Asset:
217230
return cls(

discord/member.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ class Member(discord.abc.Messageable, _UserTag):
288288
"_user",
289289
"_state",
290290
"_avatar",
291+
"_banner",
291292
"communication_disabled_until",
292293
"flags",
293294
)
@@ -328,6 +329,7 @@ def __init__(
328329
self.nick: str | None = data.get("nick", None)
329330
self.pending: bool = data.get("pending", False)
330331
self._avatar: str | None = data.get("avatar")
332+
self._banner: str | None = data.get("banner")
331333
self.communication_disabled_until: datetime.datetime | None = utils.parse_time(
332334
data.get("communication_disabled_until")
333335
)
@@ -406,6 +408,7 @@ def _copy(cls: type[M], member: M) -> M:
406408
self.activities = member.activities
407409
self._state = member._state
408410
self._avatar = member._avatar
411+
self._banner = member._banner
409412
self.communication_disabled_until = member.communication_disabled_until
410413
self.flags = member.flags
411414

@@ -434,6 +437,7 @@ def _update(self, data: MemberPayload) -> None:
434437
self.premium_since = utils.parse_time(data.get("premium_since"))
435438
self._roles = utils.SnowflakeList(map(int, data["roles"]))
436439
self._avatar = data.get("avatar")
440+
self._banner = data.get("banner")
437441
self.communication_disabled_until = utils.parse_time(
438442
data.get("communication_disabled_until")
439443
)
@@ -603,6 +607,31 @@ def guild_avatar(self) -> Asset | None:
603607
self._state, self.guild.id, self.id, self._avatar
604608
)
605609

610+
@property
611+
def display_banner(self) -> Asset | None:
612+
"""Returns the member's display banner.
613+
614+
For regular members this is just their banner, but
615+
if they have a guild specific banner then that
616+
is returned instead.
617+
618+
.. versionadded:: 2.7
619+
"""
620+
return self.guild_banner or self._user.banner
621+
622+
@property
623+
def guild_banner(self) -> Asset | None:
624+
"""Returns an :class:`Asset` for the guild banner
625+
the member has. If unavailable, ``None`` is returned.
626+
627+
.. versionadded:: 2.7
628+
"""
629+
if self._banner is None:
630+
return None
631+
return Asset._from_guild_banner(
632+
self._state, self.guild.id, self.id, self._banner
633+
)
634+
606635
@property
607636
def activity(self) -> ActivityTypes | None:
608637
"""Returns the primary

discord/types/member.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class PartialMember(TypedDict):
4242

4343
class Member(PartialMember, total=False):
4444
avatar: str
45+
banner: str
4546
user: User
4647
nick: str
4748
premium_since: str

0 commit comments

Comments
 (0)