feat: user avatar decorations (#9710)

* feat: user avatar decorations

* lint

* Update typings/index.d.ts

Co-authored-by: David Malchin <malchin459@gmail.com>

---------

Co-authored-by: David Malchin <malchin459@gmail.com>
This commit is contained in:
Elysia 2023-07-16 00:25:14 +07:00 committed by GitHub
parent 630b9d51ef
commit cb11c56a0b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 0 deletions

View file

@ -122,6 +122,16 @@ class User extends Base {
*/
this.flags = new UserFlags(data.public_flags);
}
if ('avatar_decoration' in data) {
/**
* The user avatar decoration's hash
* @type {?string}
*/
this.avatarDecoration = data.avatar_decoration;
} else {
this.avatarDecoration ??= null;
}
}
/**
@ -161,6 +171,16 @@ class User extends Base {
return this.client.rest.cdn.Avatar(this.id, this.avatar, format, size, dynamic);
}
/**
* A link to the user's avatar decoration.
* @param {StaticImageURLOptions} [options={}] Options for the image URL
* @returns {?string}
*/
avatarDecorationURL({ format, size } = {}) {
if (!this.avatarDecoration) return null;
return this.client.rest.cdn.AvatarDecoration(this.id, this.avatarDecoration, format, size);
}
/**
* A link to the user's default avatar
* @type {string}

View file

@ -73,6 +73,8 @@ exports.Endpoints = {
if (dynamic && hash.startsWith('a_')) format = 'gif';
return makeImageUrl(`${root}/avatars/${userId}/${hash}`, { format, size });
},
AvatarDecoration: (userId, hash, format = 'png', size) =>
makeImageUrl(`${root}/avatar-decorations/${userId}/${hash}`, { format, size }),
GuildMemberAvatar: (guildId, memberId, hash, format = 'webp', size, dynamic = false) => {
if (dynamic && hash.startsWith('a_')) format = 'gif';
return makeImageUrl(`${root}/guilds/${guildId}/users/${memberId}/avatars/${hash}`, { format, size });

3
typings/index.d.ts vendored
View file

@ -2698,6 +2698,7 @@ export class User extends PartialTextBasedChannel(Base) {
public accentColor: number | null | undefined;
public avatar: string | null;
public avatarDecoration: string | null;
public banner: string | null | undefined;
public bot: boolean;
public readonly createdAt: Date;
@ -2715,6 +2716,7 @@ export class User extends PartialTextBasedChannel(Base) {
public readonly tag: string;
public username: string;
public avatarURL(options?: ImageURLOptions): string | null;
public avatarDecorationURL(options?: StaticImageURLOptions): string | null;
public bannerURL(options?: ImageURLOptions): string | null;
public createDM(force?: boolean): Promise<DMChannel>;
public deleteDM(): Promise<DMChannel>;
@ -3095,6 +3097,7 @@ export const Constants: {
size: AllowedImageSize,
dynamic: boolean,
): string;
AvatarDecoration(userId: Snowflake, hash: string, format: AllowedImageFormat, size: AllowedImageSize): string;
Banner(id: Snowflake, hash: string, format: DynamicImageFormat, size: AllowedImageSize, dynamic: boolean): string;
DefaultAvatar(index: number): string;
DiscoverySplash(guildId: Snowflake, hash: string, format: AllowedImageFormat, size: AllowedImageSize): string;