Skip to content

Commit

Permalink
Update avatar decorations (#320)
Browse files Browse the repository at this point in the history
* Update avatar decorations

* add AvatarDecorationData to Member

* add AvatarDecorationURL to Member
  • Loading branch information
sebm253 committed Apr 7, 2024
1 parent 97864e4 commit 2500da8
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 25 deletions.
2 changes: 1 addition & 1 deletion discord/cdn_endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ var (

MemberAvatar = NewCDN("/guilds/{guild.id}/users/{user.id}/avatars/{member.avatar.hash}", FileFormatPNG, FileFormatJPEG, FileFormatWebP, FileFormatGIF)

UserAvatarDecoration = NewCDN("/avatar-decorations/{user.id}/{user.avatar.decoration.hash}", FileFormatPNG)
AvatarDecoration = NewCDN("/avatar-decoration-presets/{user.avatar.decoration.hash}", FileFormatPNG)

ApplicationIcon = NewCDN("/app-icons/{application.id}/{icon.hash}", FileFormatPNG, FileFormatJPEG, FileFormatWebP)
ApplicationCover = NewCDN("/app-assets/{application.id}/{cover.image.hash}", FileFormatPNG, FileFormatJPEG, FileFormatWebP)
Expand Down
32 changes: 21 additions & 11 deletions discord/member.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,18 @@ var _ Mentionable = (*Member)(nil)

// Member is a discord GuildMember
type Member struct {
User User `json:"user"`
Nick *string `json:"nick"`
Avatar *string `json:"avatar"`
RoleIDs []snowflake.ID `json:"roles,omitempty"`
JoinedAt time.Time `json:"joined_at"`
PremiumSince *time.Time `json:"premium_since,omitempty"`
Deaf bool `json:"deaf,omitempty"`
Mute bool `json:"mute,omitempty"`
Flags MemberFlags `json:"flags"`
Pending bool `json:"pending"`
CommunicationDisabledUntil *time.Time `json:"communication_disabled_until"`
User User `json:"user"`
Nick *string `json:"nick"`
Avatar *string `json:"avatar"`
RoleIDs []snowflake.ID `json:"roles,omitempty"`
JoinedAt time.Time `json:"joined_at"`
PremiumSince *time.Time `json:"premium_since,omitempty"`
Deaf bool `json:"deaf,omitempty"`
Mute bool `json:"mute,omitempty"`
Flags MemberFlags `json:"flags"`
Pending bool `json:"pending"`
CommunicationDisabledUntil *time.Time `json:"communication_disabled_until"`
AvatarDecorationData *AvatarDecorationData `json:"avatar_decoration_data"`

// This field is not present everywhere in the API and often populated by disgo
GuildID snowflake.ID `json:"guild_id"`
Expand Down Expand Up @@ -67,6 +68,15 @@ func (m Member) AvatarURL(opts ...CDNOpt) *string {
return &url
}

// AvatarDecorationURL returns the avatar decoration URL if set or nil
func (m Member) AvatarDecorationURL(opts ...CDNOpt) *string {
if m.AvatarDecorationData == nil {
return nil
}
url := formatAssetURL(AvatarDecoration, opts, m.AvatarDecorationData.Asset)
return &url
}

func (m Member) CreatedAt() time.Time {
return m.User.CreatedAt()
}
Expand Down
31 changes: 18 additions & 13 deletions discord/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,17 @@ var _ Mentionable = (*User)(nil)

// User is a struct for interacting with discord's users
type User struct {
ID snowflake.ID `json:"id"`
Username string `json:"username"`
Discriminator string `json:"discriminator"`
GlobalName *string `json:"global_name"`
Avatar *string `json:"avatar"`
Banner *string `json:"banner"`
AccentColor *int `json:"accent_color"`
Bot bool `json:"bot"`
System bool `json:"system"`
PublicFlags UserFlags `json:"public_flags"`
AvatarDecoration *string `json:"avatar_decoration"`
ID snowflake.ID `json:"id"`
Username string `json:"username"`
Discriminator string `json:"discriminator"`
GlobalName *string `json:"global_name"`
Avatar *string `json:"avatar"`
Banner *string `json:"banner"`
AccentColor *int `json:"accent_color"`
Bot bool `json:"bot"`
System bool `json:"system"`
PublicFlags UserFlags `json:"public_flags"`
AvatarDecorationData *AvatarDecorationData `json:"avatar_decoration_data"`
}

// String returns a mention of the user
Expand Down Expand Up @@ -145,10 +145,10 @@ func (u User) BannerURL(opts ...CDNOpt) *string {

// AvatarDecorationURL returns the avatar decoration URL if set or nil
func (u User) AvatarDecorationURL(opts ...CDNOpt) *string {
if u.AvatarDecoration == nil {
if u.AvatarDecorationData == nil {
return nil
}
url := formatAssetURL(UserAvatarDecoration, opts, u.ID, *u.AvatarDecoration)
url := formatAssetURL(AvatarDecoration, opts, u.AvatarDecorationData.Asset)
return &url
}

Expand Down Expand Up @@ -198,3 +198,8 @@ type ApplicationRoleConnectionUpdate struct {
PlatformUsername *string `json:"platform_username,omitempty"`
Metadata *map[string]string `json:"metadata,omitempty"`
}

type AvatarDecorationData struct {
Asset string `json:"asset"`
SkuID snowflake.ID `json:"sku_id"`
}

0 comments on commit 2500da8

Please sign in to comment.