Skip to content

Commit

Permalink
Add User.display_avatar and .default_avatar
Browse files Browse the repository at this point in the history
  • Loading branch information
4Kaylum committed Sep 30, 2023
1 parent e4ac327 commit f867a83
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
8 changes: 8 additions & 0 deletions novus/models/asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,14 @@ def from_sticker(cls, sticker: Sticker) -> Self:
def from_user_avatar(cls, user: User | GuildMember | Webhook) -> Self:
return cls(f"/avatars/{user.id}/{user.avatar_hash}")

@classmethod
def from_default_user_avatar(cls, user: User | GuildMember) -> Self:
if user.discriminator == "0":
index = (user.id >> 22) % 6
else:
index = int(user.discriminator) % 5
return cls(f"/embed/avatars/{index}", default_format="png")

@classmethod
def from_user_banner(cls, user: User | GuildMember) -> Self:
return cls(f"/banners/{user.id}/{user.avatar_hash}")
Expand Down
9 changes: 9 additions & 0 deletions novus/models/guild_member.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ class GuildMember(Hashable, Messageable):
'premium_type',
'_cs_avatar',
'_cs_banner',
'_cs_default_avatar',

'_user',
'nick',
Expand Down Expand Up @@ -294,6 +295,14 @@ def guild_avatar(self) -> Asset | None:
return None
return Asset.from_guild_member_avatar(self)

@property
def default_avatar(self) -> Asset:
return self._user.default_avatar

@property
def display_avatar(self) -> Asset:
return self.guild_avatar or self.avatar or self.default_avatar

def _update(self, data: payloads.GuildMember) -> Self:
if "user" in data:
self._user._update(data["user"])
Expand Down
10 changes: 10 additions & 0 deletions novus/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ class User(Hashable, Messageable):
'flags',
'premium_type',
'_cs_avatar',
'_cs_default_avatar',
'_cs_banner',
'_guilds',
'_dm_channel',
Expand Down Expand Up @@ -138,6 +139,14 @@ def avatar(self) -> Asset | None:
return None
return Asset.from_user_avatar(self)

@cached_slot_property('_cs_default_avatar')
def default_avatar(self) -> Asset:
return Asset.from_default_user_avatar(self)

@property
def display_avatar(self) -> Asset:
return self.avatar or self.default_avatar

@cached_slot_property('_cs_banner')
def banner(self) -> Asset | None:
if self.banner_hash is None:
Expand Down Expand Up @@ -165,6 +174,7 @@ def _update(self, data: payloads.User | payloads.PartialUser) -> Self:

self.username = data['username']
self.discriminator = data['discriminator']
del self.default_avatar
self.avatar_hash = data.get('avatar')
del self.avatar
self.bot = data.get('bot', False)
Expand Down

0 comments on commit f867a83

Please sign in to comment.