diff --git a/packages/discord.js/src/structures/BaseGuildEmoji.js b/packages/discord.js/src/structures/BaseGuildEmoji.js index 5a12bd9da249..a5c2d5da1bf8 100644 --- a/packages/discord.js/src/structures/BaseGuildEmoji.js +++ b/packages/discord.js/src/structures/BaseGuildEmoji.js @@ -53,4 +53,23 @@ class BaseGuildEmoji extends Emoji { } } +/** + * Returns a URL for the emoji. + * @method imageURL + * @memberof BaseGuildEmoji + * @instance + * @param {BaseImageURLOptions} [options] Options for the image URL + * @returns {string} + */ + +/** + * Returns a URL for the emoji. + * @name url + * @memberof BaseGuildEmoji + * @instance + * @type {string} + * @readonly + * @deprecated Use {@link BaseGuildEmoji#imageURL} instead. + */ + module.exports = BaseGuildEmoji; diff --git a/packages/discord.js/src/structures/Emoji.js b/packages/discord.js/src/structures/Emoji.js index 16c22f9271b5..3cdfa815e267 100644 --- a/packages/discord.js/src/structures/Emoji.js +++ b/packages/discord.js/src/structures/Emoji.js @@ -1,8 +1,11 @@ 'use strict'; +const process = require('node:process'); const { DiscordSnowflake } = require('@sapphire/snowflake'); const Base = require('./Base'); +let deprecationEmittedForURL = false; + /** * Represents an emoji, see {@link GuildEmoji} and {@link ReactionEmoji}. * @extends {Base} @@ -40,12 +43,27 @@ class Emoji extends Base { } /** - * The URL to the emoji file if it's a custom emoji + * Returns a URL for the emoji or `null` if this is not a custom emoji. + * @param {BaseImageURLOptions} [options] Options for the image URL + * @returns {?string} + */ + imageURL(options) { + return this.id && this.client.rest.cdn.emoji(this.id, options); + } + + /** + * Returns a URL for the emoji or `null` if this is not a custom emoji. * @type {?string} * @readonly + * @deprecated Use {@link Emoji#imageURL} instead. */ get url() { - return this.id && this.client.rest.cdn.emoji(this.id, this.animated ? 'gif' : 'png'); + if (!deprecationEmittedForURL) { + process.emitWarning('The Emoji#url getter is deprecated. Use Emoji#imageURL() instead.', 'DeprecationWarning'); + deprecationEmittedForURL = true; + } + + return this.imageURL({ extension: this.animated ? 'gif' : 'png' }); } /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 4dd638a05612..ba7059d12a1a 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -627,6 +627,8 @@ 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 get url(): string; public available: boolean | null; public get createdAt(): Date; public get createdTimestamp(): number; @@ -1312,6 +1314,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 get url(): string | null; public toJSON(): unknown; public toString(): string; @@ -1530,7 +1533,6 @@ export class GuildEmoji extends BaseGuildEmoji { public guild: Guild; public author: User | null; public get roles(): GuildEmojiRoleManager; - public get url(): string; public delete(reason?: string): Promise; public edit(options: GuildEmojiEditOptions): Promise; public equals(other: GuildEmoji | unknown): boolean;