@@ -328,6 +328,9 @@ class Member(DiscordObject, _SendDMMixin):
328
328
metadata = docs ("Whether the user has **not** passed guild's membership screening requirements" ),
329
329
)
330
330
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
+ )
331
334
communication_disabled_until : Optional ["Timestamp" ] = attrs .field (
332
335
default = None ,
333
336
converter = optional_c (timestamp_converter ),
@@ -372,6 +375,12 @@ def _process_dict(cls, data: Dict[str, Any], client: "Client") -> Dict[str, Any]
372
375
f"[DEBUG NEEDED - REPORT THIS] Incomplete dictionary has been passed to member object: { e } "
373
376
)
374
377
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
+ )
375
384
376
385
data ["role_ids" ] = data .pop ("roles" , [])
377
386
@@ -440,6 +449,11 @@ def avatar_url(self) -> str:
440
449
"""The users avatar url."""
441
450
return self .display_avatar .url
442
451
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
+
443
457
@property
444
458
def premium (self ) -> bool :
445
459
"""Is this member a server booster?"""
0 commit comments