Add support to edit emojis (#1142)

* Add support to edit emojis

* Fixes for coding style.

* Add and use guildEmoji constants for updateEmoji

* Just use the Constant

* Fix typo in edit documentation

* Specify property types

* Fix ridiculous typo.

* Update Emoji.js
This commit is contained in:
Alex
2017-01-30 22:47:05 -05:00
committed by Schuyler Cebulskie
parent 94483ae194
commit 18729b25c7
5 changed files with 35 additions and 1 deletions

View File

@@ -123,6 +123,7 @@ class ClientDataManager {
const oldEmoji = cloneObject(currentEmoji);
currentEmoji.setup(newData);
this.client.emit(Constants.Events.GUILD_EMOJI_UPDATE, oldEmoji, currentEmoji);
return currentEmoji;
}
}

View File

@@ -2,7 +2,10 @@ const Action = require('./Action');
class GuildEmojiUpdateAction extends Action {
handle(oldEmoji, newEmoji) {
this.client.dataManager.updateEmoji(oldEmoji, newEmoji);
const emoji = this.client.dataManager.updateEmoji(oldEmoji, newEmoji);
return {
emoji,
};
}
}

View File

@@ -564,6 +564,14 @@ class RESTMethods {
.then(data => this.client.actions.GuildEmojiCreate.handle(data, guild).emoji);
}
updateEmoji(emoji, _data) {
const data = {};
if (_data.name) data.name = _data.name;
if (_data.roles) data.roles = _data.roles.map(r => r.id ? r.id : r);
return this.rest.makeRequest('patch', Constants.Endpoints.guildEmoji(emoji.guild.id, emoji.id), true, data)
.then(newEmoji => this.client.actions.GuildEmojiUpdate.handle(emoji, newEmoji).emoji);
}
deleteEmoji(emoji) {
return this.rest.makeRequest('delete', `${Constants.Endpoints.guildEmojis(emoji.guild.id)}/${emoji.id}`, true)
.then(() => this.client.actions.GuildEmojiDelete.handle(emoji).data);

View File

@@ -101,6 +101,27 @@ class Emoji {
return encodeURIComponent(this.name);
}
/**
* Data for editing an emoji
* @typedef {Object} EmojiEditData
* @property {string} [name] The name of the emoji
* @property {Collection<string, Role>|Array<string|Role>} [roles] Roles to restrict emoji to
*/
/**
* Edits the emoji
* @param {EmojiEditData} data The new data for the emoji
* @returns {Promise<Emoji>}
* @example
* // edit a emoji
* emoji.edit({name: 'newemoji'})
* .then(e => console.log(`Edited emoji ${e}`))
* .catch(console.error);
*/
edit(data) {
return this.client.rest.methods.updateEmoji(this, data);
}
/**
* When concatenated with a string, this automatically returns the emoji mention rather than the object.
* @returns {string}

View File

@@ -125,6 +125,7 @@ const Endpoints = exports.Endpoints = {
guildMemberNickname: (guildID) => `${Endpoints.guildMember(guildID, '@me')}/nick`,
guildChannels: (guildID) => `${Endpoints.guild(guildID)}/channels`,
guildEmojis: (guildID) => `${Endpoints.guild(guildID)}/emojis`,
guildEmoji: (guildID, emojiID) => `${Endpoints.guildEmojis(guildID)}/${emojiID}`,
guildSearch: (guildID) => `${Endpoints.guild(guildID)}/messages/search`,
guildVoiceRegions: (guildID) => `${Endpoints.guild(guildID)}/regions`,