mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
120 lines
2.4 KiB
JavaScript
120 lines
2.4 KiB
JavaScript
const Constants = require('../util/Constants');
|
|
const Collection = require('../util/Collection');
|
|
|
|
/**
|
|
* Represents a custom emoji
|
|
*/
|
|
class Emoji {
|
|
constructor(guild, data) {
|
|
/**
|
|
* The Client that instantiated this object
|
|
* @name Emoji#client
|
|
* @type {Client}
|
|
* @readonly
|
|
*/
|
|
Object.defineProperty(this, 'client', { value: guild.client });
|
|
|
|
/**
|
|
* The guild this emoji is part of
|
|
* @type {Guild}
|
|
*/
|
|
this.guild = guild;
|
|
|
|
this.setup(data);
|
|
}
|
|
|
|
setup(data) {
|
|
/**
|
|
* The ID of the emoji
|
|
* @type {string}
|
|
*/
|
|
this.id = data.id;
|
|
|
|
/**
|
|
* The name of the emoji
|
|
* @type {string}
|
|
*/
|
|
this.name = data.name;
|
|
|
|
/**
|
|
* Whether or not this emoji requires colons surrounding it
|
|
* @type {boolean}
|
|
*/
|
|
this.requiresColons = data.require_colons;
|
|
|
|
/**
|
|
* Whether this emoji is managed by an external service
|
|
* @type {boolean}
|
|
*/
|
|
this.managed = data.managed;
|
|
|
|
this._roles = data.roles;
|
|
}
|
|
|
|
/**
|
|
* The timestamp the emoji was created at
|
|
* @type {number}
|
|
* @readonly
|
|
*/
|
|
get createdTimestamp() {
|
|
return (this.id / 4194304) + 1420070400000;
|
|
}
|
|
|
|
/**
|
|
* The time the emoji was created
|
|
* @type {Date}
|
|
* @readonly
|
|
*/
|
|
get createdAt() {
|
|
return new Date(this.createdTimestamp);
|
|
}
|
|
|
|
/**
|
|
* A collection of roles this emoji is active for (empty if all), mapped by role ID.
|
|
* @type {Collection<string, Role>}
|
|
* @readonly
|
|
*/
|
|
get roles() {
|
|
const roles = new Collection();
|
|
for (const role of this._roles) {
|
|
if (this.guild.roles.has(role)) roles.set(role, this.guild.roles.get(role));
|
|
}
|
|
return roles;
|
|
}
|
|
|
|
/**
|
|
* The URL to the emoji file
|
|
* @type {string}
|
|
* @readonly
|
|
*/
|
|
get url() {
|
|
return Constants.Endpoints.emoji(this.id);
|
|
}
|
|
|
|
/**
|
|
* When concatenated with a string, this automatically returns the emoji mention rather than the object.
|
|
* @returns {string}
|
|
* @example
|
|
* // send an emoji:
|
|
* const emoji = guild.emojis.first();
|
|
* msg.reply(`Hello! ${emoji}`);
|
|
*/
|
|
toString() {
|
|
return this.requiresColons ? `<:${this.name}:${this.id}>` : this.name;
|
|
}
|
|
|
|
/**
|
|
* The identifier of this emoji, used for message reactions
|
|
* @readonly
|
|
* @type {string}
|
|
*/
|
|
get identifier() {
|
|
if (this.id) {
|
|
return `${this.name}:${this.id}`;
|
|
}
|
|
return encodeURIComponent(this.name);
|
|
}
|
|
}
|
|
|
|
module.exports = Emoji;
|