diff --git a/packages/discord.js/src/structures/BaseGuildEmoji.js b/packages/discord.js/src/structures/BaseGuildEmoji.js index 0eb29670d..04b408520 100644 --- a/packages/discord.js/src/structures/BaseGuildEmoji.js +++ b/packages/discord.js/src/structures/BaseGuildEmoji.js @@ -58,7 +58,7 @@ class BaseGuildEmoji extends Emoji { * @method imageURL * @memberof BaseGuildEmoji * @instance - * @param {BaseImageURLOptions} [options] Options for the image URL + * @param {ImageURLOptions} [options={}] Options for the image URL * @returns {string} */ diff --git a/packages/discord.js/src/structures/Emoji.js b/packages/discord.js/src/structures/Emoji.js index 0dd368e5d..3a562bff0 100644 --- a/packages/discord.js/src/structures/Emoji.js +++ b/packages/discord.js/src/structures/Emoji.js @@ -42,11 +42,11 @@ class Emoji extends Base { /** * Returns a URL for the emoji or `null` if this is not a custom emoji. - * @param {BaseImageURLOptions} [options] Options for the image URL + * @param {ImageURLOptions} [options={}] Options for the image URL * @returns {?string} */ - imageURL(options) { - return this.id && this.client.rest.cdn.emoji(this.id, options); + imageURL(options = {}) { + return this.id && this.client.rest.cdn.emoji(this.id, this.animated, options); } /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index a5ef67f41..4b182960a 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -634,7 +634,7 @@ export abstract class BaseGuild extends Base { export class BaseGuildEmoji extends Emoji { protected constructor(client: Client, data: RawGuildEmojiData, guild: Guild | GuildPreview); - public imageURL(options?: BaseImageURLOptions): string; + public imageURL(options?: ImageURLOptions): string; public get url(): string; public available: boolean | null; public get createdAt(): Date; @@ -1333,7 +1333,7 @@ export class Emoji extends Base { public id: Snowflake | null; public name: string | null; public get identifier(): string; - public imageURL(options?: BaseImageURLOptions): string | null; + public imageURL(options?: ImageURLOptions): string | null; public get url(): string | null; public toJSON(): unknown; public toString(): string; diff --git a/packages/rest/__tests__/CDN.test.ts b/packages/rest/__tests__/CDN.test.ts index 5f787cd0e..09302af0e 100644 --- a/packages/rest/__tests__/CDN.test.ts +++ b/packages/rest/__tests__/CDN.test.ts @@ -50,12 +50,28 @@ test('discoverySplash default', () => { expect(cdn.discoverySplash(id, hash)).toEqual(`${baseCDN}/discovery-splashes/${id}/${hash}.webp`); }); -test('emoji default', () => { - expect(cdn.emoji(id)).toEqual(`${baseCDN}/emojis/${id}.webp`); +test('emoji static', () => { + expect(cdn.emoji(id, false)).toEqual(`${baseCDN}/emojis/${id}.webp`); }); -test('emoji gif', () => { - expect(cdn.emoji(id, { extension: 'gif' })).toEqual(`${baseCDN}/emojis/${id}.gif`); +test('emoji static with JPG extension', () => { + expect(cdn.emoji(id, false, { extension: 'jpg' })).toEqual(`${baseCDN}/emojis/${id}.jpg`); +}); + +test('emoji static with JPG extension with force static', () => { + expect(cdn.emoji(id, false, { extension: 'jpg', forceStatic: true })).toEqual(`${baseCDN}/emojis/${id}.jpg`); +}); + +test('emoji animated', () => { + expect(cdn.emoji(id, true)).toEqual(`${baseCDN}/emojis/${id}.gif`); +}); + +test('emoji animated with JPG extension', () => { + expect(cdn.emoji(id, true, { extension: 'jpg' })).toEqual(`${baseCDN}/emojis/${id}.gif`); +}); + +test('emoji animated with JPG extension with force static', () => { + expect(cdn.emoji(id, true, { extension: 'jpg', forceStatic: true })).toEqual(`${baseCDN}/emojis/${id}.jpg`); }); test('guildMemberAvatar default', () => { diff --git a/packages/rest/src/lib/CDN.ts b/packages/rest/src/lib/CDN.ts index 6410e5110..99243e29d 100644 --- a/packages/rest/src/lib/CDN.ts +++ b/packages/rest/src/lib/CDN.ts @@ -161,10 +161,11 @@ export class CDN { * Generates an emoji's URL. * * @param emojiId - The emoji id + * @param animated - Whether the emoji is animated * @param options - Optional options for the emoji */ - public emoji(emojiId: string, options?: Readonly): string { - return this.makeURL(`/emojis/${emojiId}`, options); + public emoji(emojiId: string, animated: boolean, options?: Readonly): string { + return this.dynamicMakeURL(`/emojis/${emojiId}`, animated ? 'a_' : '', options); } /**