@@ -328,6 +328,9 @@ class Member(DiscordObject, _SendDMMixin):
328328 metadata = docs ("Whether the user has **not** passed guild's membership screening requirements" ),
329329 )
330330 guild_avatar : "Asset" = attrs .field (repr = False , default = None , metadata = docs ("The user's guild avatar" ))
331+ guild_banner : Optional ["Asset" ] = attrs .field (
332+ repr = False , default = None , metadata = docs ("The user's guild banner, if any" )
333+ )
331334 communication_disabled_until : Optional ["Timestamp" ] = attrs .field (
332335 default = None ,
333336 converter = optional_c (timestamp_converter ),
@@ -372,6 +375,12 @@ def _process_dict(cls, data: Dict[str, Any], client: "Client") -> Dict[str, Any]
372375 f"[DEBUG NEEDED - REPORT THIS] Incomplete dictionary has been passed to member object: { e } "
373376 )
374377 raise
378+ if data .get ("banner" ):
379+ data ["guild_banner" ] = Asset .from_path_hash (
380+ client ,
381+ f"guilds/{ data ['guild_id' ]} /users/{ data ['id' ]} /banners/{{}}" ,
382+ data .pop ("banner" , None ),
383+ )
375384
376385 data ["role_ids" ] = data .pop ("roles" , [])
377386
@@ -440,6 +449,11 @@ def avatar_url(self) -> str:
440449 """The users avatar url."""
441450 return self .display_avatar .url
442451
452+ @property
453+ def banner (self ) -> Optional ["Asset" ]:
454+ """The user's banner, if any, will return `guild_banner` if one is set, otherwise will return user banner."""
455+ return self .guild_banner or self .user .banner
456+
443457 @property
444458 def premium (self ) -> bool :
445459 """Is this member a server booster?"""
0 commit comments