Skip to content

Commit

Permalink
backport discordjs#5696
Browse files Browse the repository at this point in the history
  • Loading branch information
AAGaming committed May 21, 2022
1 parent 5e58e1e commit 998cddc
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 2 deletions.
34 changes: 33 additions & 1 deletion src/structures/GuildMember.js
Expand Up @@ -78,6 +78,15 @@ class GuildMember extends Base {
}

if ('nick' in data) this.nickname = data.nick;
if ('avatar' in data) {
/**
* The guild member's avatar hash
* @type {?string}
*/
this.avatar = data.avatar;
} else if (typeof this.avatar !== 'string') {
this.avatar = null;
}
if ('joined_at' in data) this.joinedTimestamp = new Date(data.joined_at).getTime();
if ('premium_since' in data) this.premiumSinceTimestamp = new Date(data.premium_since).getTime();
if ('roles' in data) this._roles = data.roles;
Expand Down Expand Up @@ -128,6 +137,26 @@ class GuildMember extends Base {
return this.guild.voiceStates.cache.get(this.id) || new VoiceState(this.guild, { user_id: this.id });
}

/**
* A link to the member's guild avatar.
* @param {ImageURLOptions} [options={}] Options for the Image URL
* @returns {?string}
*/
avatarURL({ format, size, dynamic } = {}) {
if (!this.avatar) return null;
return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic);
}

/**
* A link to the member's guild avatar if they have one.
* Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
* @param {ImageURLOptions} [options={}] Options for the Image URL
* @returns {string}
*/
displayAvatarURL(options) {
return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
}

/**
* The time this member joined the guild
* @type {?Date}
Expand Down Expand Up @@ -393,7 +422,7 @@ class GuildMember extends Base {
}

toJSON() {
return super.toJSON({
const json = super.toJSON({
guild: 'guildID',
user: 'userID',
displayName: true,
Expand All @@ -402,6 +431,9 @@ class GuildMember extends Base {
lastMessageID: false,
roles: true,
});
json.avatarURL = this.avatarURL();
json.displayAvatarURL = this.displayAvatarURL();
return json;
}

// These are here only for documentation purposes - they are implemented by TextBasedChannel
Expand Down
6 changes: 5 additions & 1 deletion src/util/Constants.js
Expand Up @@ -131,9 +131,13 @@ exports.Endpoints = {
Asset: name => `${root}/assets/${name}`,
DefaultAvatar: discriminator => `${root}/embed/avatars/${discriminator}.png`,
Avatar: (userID, hash, format = 'webp', size, dynamic = false) => {
if (dynamic) format = hash.startsWith('a_') ? 'gif' : format;
if (dynamic && hash.startsWith('a_')) format = 'gif';
return makeImageUrl(`${root}/avatars/${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 });
},
Banner: (guildID, hash, format = 'webp', size) =>
makeImageUrl(`${root}/banners/${guildID}/${hash}`, { format, size }),
Icon: (guildID, hash, format = 'webp', size, dynamic = false) => {
Expand Down
4 changes: 4 additions & 0 deletions typings/index.d.ts
Expand Up @@ -357,6 +357,7 @@ declare module 'better-discord.js' {
Emoji: (emojiID: string, format: 'png' | 'gif') => string;
Avatar: (userID: string | number, hash: string, format: 'default' | AllowedImageFormat, size: number) => string;
Banner: (guildID: string | number, hash: string, format: AllowedImageFormat, size: number) => string;
GuildMemberAvatar: (guildId: string | number, memberId: string | number, hash: string, format: 'default' | AllowedImageFormat, size: number) => string;
Icon: (userID: string | number, hash: string, format: 'default' | AllowedImageFormat, size: number) => string;
AppIcon: (userID: string | number, hash: string, format: AllowedImageFormat, size: number) => string;
AppAsset: (userID: string | number, hash: string, format: AllowedImageFormat, size: number) => string;
Expand Down Expand Up @@ -821,6 +822,7 @@ declare module 'better-discord.js' {

export class GuildMember extends PartialTextBasedChannel(Base) {
constructor(client: Client, data: object, guild: Guild);
public avatar: string | null;
public readonly bannable: boolean;
public deleted: boolean;
public readonly displayColor: number;
Expand All @@ -842,10 +844,12 @@ declare module 'better-discord.js' {
public readonly roles: GuildMemberRoleManager;
public user: User;
public readonly voice: VoiceState;
public avatarURL(options?: ImageURLOptions): string | null;
public ban(options?: BanOptions): Promise<GuildMember>;
public fetch(force?: boolean): Promise<GuildMember>;
public createDM(force?: boolean): Promise<DMChannel>;
public deleteDM(): Promise<DMChannel>;
public displayAvatarURL(options?: ImageURLOptions): string;
public edit(data: GuildMemberEditData, reason?: string): Promise<GuildMember>;
public hasPermission(
permission: PermissionResolvable,
Expand Down

0 comments on commit 998cddc

Please sign in to comment.