feat: backport animated emojis support (#2217)

Commit: 84e4dd6a99
This commit is contained in:
SpaceEEC
2018-01-04 01:16:50 +01:00
committed by Crawl
parent c79823002b
commit 659e89e8cd
3 changed files with 19 additions and 14 deletions

View File

@@ -49,6 +49,12 @@ class Emoji {
*/ */
this.managed = data.managed; this.managed = data.managed;
/**
* Whether this emoji is animated
* @type {boolean}
*/
this.animated = data.animated;
this._roles = data.roles; this._roles = data.roles;
} }
@@ -89,7 +95,7 @@ class Emoji {
* @readonly * @readonly
*/ */
get url() { get url() {
return Constants.Endpoints.CDN(this.client.options.http.cdn).Emoji(this.id); return Constants.Endpoints.CDN(this.client.options.http.cdn).Emoji(this.id, this.animated ? 'gif' : 'png');
} }
/** /**
@@ -187,7 +193,11 @@ class Emoji {
* msg.reply(`Hello! ${emoji}`); * msg.reply(`Hello! ${emoji}`);
*/ */
toString() { toString() {
return this.requiresColons ? `<:${this.name}:${this.id}>` : this.name; if (!this.id || !this.requiresColons) {
return this.name;
}
return `<${this.animated ? 'a' : ''}:${this.name}:${this.id}>`;
} }
/** /**

View File

@@ -202,7 +202,7 @@ const Endpoints = exports.Endpoints = {
Member: m => exports.Endpoints.Guild(m.guild).Member(m), Member: m => exports.Endpoints.Guild(m.guild).Member(m),
CDN(root) { CDN(root) {
return { return {
Emoji: emojiID => `${root}/emojis/${emojiID}.png`, Emoji: (emojiID, format = 'png') => `${root}/emojis/${emojiID}.${format}`,
Asset: name => `${root}/assets/${name}`, Asset: name => `${root}/assets/${name}`,
Avatar: (userID, hash) => `${root}/avatars/${userID}/${hash}.${hash.startsWith('a_') ? 'gif' : 'png'}?size=2048`, Avatar: (userID, hash) => `${root}/avatars/${userID}/${hash}.${hash.startsWith('a_') ? 'gif' : 'png'}?size=2048`,
Icon: (guildID, hash) => `${root}/icons/${guildID}/${hash}.jpg`, Icon: (guildID, hash) => `${root}/icons/${guildID}/${hash}.jpg`,

View File

@@ -68,22 +68,17 @@ class Util {
* Parses emoji info out of a string. The string must be one of: * Parses emoji info out of a string. The string must be one of:
* * A UTF-8 emoji (no ID) * * A UTF-8 emoji (no ID)
* * A URL-encoded UTF-8 emoji (no ID) * * A URL-encoded UTF-8 emoji (no ID)
* * A Discord custom emoji (`<:name:id>`) * * A Discord custom emoji (`<:name:id>` or `<a:name:id>`)
* @param {string} text Emoji string to parse * @param {string} text Emoji string to parse
* @returns {Object} Object with `name` and `id` properties * @returns {?Object} Object with `animated`, `name`, and `id` properties
* @private * @private
*/ */
static parseEmoji(text) { static parseEmoji(text) {
if (text.includes('%')) text = decodeURIComponent(text); if (text.includes('%')) text = decodeURIComponent(text);
if (text.includes(':')) { if (!text.includes(':')) return { animated: false, name: text, id: null };
const [name, id] = text.split(':'); const m = text.match(/<?(a)?:(\w{2,32}):(\d{17,19})>?/);
return { name, id }; if (!m) return null;
} else { return { animated: Boolean(m[1]), name: m[2], id: m[3] };
return {
name: text,
id: null,
};
}
} }
/** /**