diff --git a/src/client/actions/GuildEmojisUpdate.js b/src/client/actions/GuildEmojisUpdate.js index 90f43eeba..aaa898477 100644 --- a/src/client/actions/GuildEmojisUpdate.js +++ b/src/client/actions/GuildEmojisUpdate.js @@ -12,7 +12,7 @@ class GuildEmojisUpdateAction extends Action { const cachedEmoji = guild.emojis.get(emoji.id); if (cachedEmoji) { deletions.delete(emoji.id); - if (!cachedEmoji.equals(emoji, true)) { + if (!cachedEmoji.equals(emoji)) { // Emoji updated this.client.actions.GuildEmojiUpdate.handle(cachedEmoji, emoji); } diff --git a/src/stores/GuildEmojiRoleStore.js b/src/stores/GuildEmojiRoleStore.js index 2471fb5fe..f8ac141a7 100644 --- a/src/stores/GuildEmojiRoleStore.js +++ b/src/stores/GuildEmojiRoleStore.js @@ -27,11 +27,9 @@ class GuildEmojiRoleStore extends DataStore { if (roleOrRoles.includes(null)) { return Promise.reject(new TypeError('INVALID_TYPE', 'roles', 'Array or Collection of Roles or Snowflakes', true)); - } else { - for (const role of roleOrRoles) super.set(role.id, role); } - - return this.set(this); + const newRoles = [...new Set(roleOrRoles.concat(this.array()))]; + return this.set(newRoles); } /** @@ -48,11 +46,9 @@ class GuildEmojiRoleStore extends DataStore { if (roleOrRoles.includes(null)) { return Promise.reject(new TypeError('INVALID_TYPE', 'roles', 'Array or Collection of Roles or Snowflakes', true)); - } else { - for (const role of roleOrRoles) super.remove(role); } - - return this.set(this); + const newRoles = this.keyArray().filter(role => !roleOrRoles.includes(role)); + return this.set(newRoles); } /** @@ -74,6 +70,12 @@ class GuildEmojiRoleStore extends DataStore { return this.emoji.edit({ roles }); } + clone() { + const clone = new this.constructor(this.emoji); + clone._patch(this.keyArray()); + return clone; + } + /** * Patches the roles for this store * @param {Snowflake[]} roles The new roles diff --git a/src/structures/GuildEmoji.js b/src/structures/GuildEmoji.js index 7568738ae..acad18197 100644 --- a/src/structures/GuildEmoji.js +++ b/src/structures/GuildEmoji.js @@ -43,6 +43,12 @@ class GuildEmoji extends Emoji { if (data.roles) this.roles._patch(data.roles); } + _clone() { + const clone = super._clone(); + clone.roles = this.roles.clone(); + return clone; + } + /** * The timestamp the emoji was created at * @type {number} @@ -94,7 +100,11 @@ class GuildEmoji extends Emoji { name: data.name, roles: data.roles ? data.roles.map(r => r.id ? r.id : r) : undefined, }, reason }) - .then(() => this); + .then(() => { + const clone = this._clone(); + clone._patch(data); + return clone; + }); } /** @@ -129,12 +139,14 @@ class GuildEmoji extends Emoji { other.name === this.name && other.managed === this.managed && other.requiresColons === this.requiresColons && + other.roles.size === this.roles.size && other.roles.every(role => this.roles.has(role.id)) ); } else { return ( other.id === this.id && other.name === this.name && + other.roles.length === this.roles.size && other.roles.every(role => this.roles.has(role)) ); }