From 9181a31e0ba330502052c94da544bb15c8b66f11 Mon Sep 17 00:00:00 2001 From: awned <65061212+ceilingfans@users.noreply.github.com> Date: Tue, 18 Jan 2022 15:35:36 +0800 Subject: [PATCH] feat(guildemojimanager): add `delete` and `edit` methods (#7286) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rodry <38259440+ImRodry@users.noreply.github.com> Co-authored-by: Antonio Román --- .../src/managers/GuildEmojiManager.js | 42 +++++++++++++++++++ .../discord.js/src/structures/GuildEmoji.js | 19 ++------- packages/discord.js/typings/index.d.ts | 2 + 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/packages/discord.js/src/managers/GuildEmojiManager.js b/packages/discord.js/src/managers/GuildEmojiManager.js index 58ffa6242..b96b10ba3 100644 --- a/packages/discord.js/src/managers/GuildEmojiManager.js +++ b/packages/discord.js/src/managers/GuildEmojiManager.js @@ -100,6 +100,48 @@ class GuildEmojiManager extends BaseGuildEmojiManager { for (const emoji of data) emojis.set(emoji.id, this._add(emoji, cache)); return emojis; } + + /** + * Deletes an emoji. + * @param {EmojiResolvable} emoji The Emoji resolvable to delete + * @param {string} [reason] Reason for deleting the emoji + * @returns {Promise} + */ + async delete(emoji, reason) { + const id = this.resolveId(emoji); + if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true); + await this.client.api.guilds(this.guild.id).emojis(id).delete({ reason }); + } + + /** + * Edits an emoji. + * @param {EmojiResolvable} emoji The Emoji resolvable to edit + * @param {GuildEmojiEditData} data The new data for the emoji + * @param {string} [reason] Reason for editing this emoji + * @returns {Promise} + */ + async edit(emoji, data, reason) { + const id = this.resolveId(emoji); + if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true); + const roles = data.roles?.map(r => this.guild.roles.resolveId(r)); + const newData = await this.client.api + .guilds(this.guild.id) + .emojis(id) + .patch({ + data: { + name: data.name, + roles, + }, + reason, + }); + const existing = this.cache.get(id); + if (existing) { + const clone = existing._clone(); + clone._patch(newData); + return clone; + } + return this._add(newData); + } } module.exports = GuildEmojiManager; diff --git a/packages/discord.js/src/structures/GuildEmoji.js b/packages/discord.js/src/structures/GuildEmoji.js index e5629fde9..c38f632fc 100644 --- a/packages/discord.js/src/structures/GuildEmoji.js +++ b/packages/discord.js/src/structures/GuildEmoji.js @@ -104,21 +104,8 @@ class GuildEmoji extends BaseGuildEmoji { * .then(e => console.log(`Edited emoji ${e}`)) * .catch(console.error); */ - async edit(data, reason) { - const roles = data.roles?.map(r => r.id ?? r); - const newData = await this.client.api - .guilds(this.guild.id) - .emojis(this.id) - .patch({ - data: { - name: data.name, - roles, - }, - reason, - }); - const clone = this._clone(); - clone._patch(newData); - return clone; + edit(data, reason) { + return this.guild.emojis.edit(this.id, data, reason); } /** @@ -137,7 +124,7 @@ class GuildEmoji extends BaseGuildEmoji { * @returns {Promise} */ async delete(reason) { - await this.client.api.guilds(this.guild.id).emojis(this.id).delete({ reason }); + await this.guild.emojis.delete(this.id, reason); return this; } diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index b3c0fd179..c67a96cb5 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -2874,6 +2874,8 @@ export class GuildEmojiManager extends BaseGuildEmojiManager { ): Promise; public fetch(id: Snowflake, options?: BaseFetchOptions): Promise; public fetch(id?: undefined, options?: BaseFetchOptions): Promise>; + public delete(emoji: EmojiResolvable, reason?: string): Promise; + public edit(emoji: EmojiResolvable, data: GuildEmojiEditData, reason?: string): Promise; } export class GuildEmojiRoleManager extends DataManager {