From 0dd3ed72ef3e2c76fe330e13ec572ad05be505a2 Mon Sep 17 00:00:00 2001 From: izexi <43889168+izexi@users.noreply.github.com> Date: Tue, 7 May 2019 20:56:39 +0100 Subject: [PATCH] fix(Partials): Client#event:messageUpdate(oldMessage) and MessageReactionAdd on guild channels (#3250) * ref: add getPayload and use for other get* methods * return existing data.* * use Action.getUser() --- src/client/actions/Action.js | 69 +++++++++++---------- src/client/actions/MessageReactionAdd.js | 2 +- src/client/actions/MessageReactionRemove.js | 2 +- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/client/actions/Action.js b/src/client/actions/Action.js index 0b03c071b..7f21318b4 100644 --- a/src/client/actions/Action.js +++ b/src/client/actions/Action.js @@ -23,47 +23,52 @@ class GenericAction { return data; } - getChannel(data) { - const id = data.channel_id || data.id; - return data.channel || (this.client.options.partials.includes(PartialTypes.CHANNEL) ? - this.client.channels.add({ - id, - guild_id: data.guild_id, - }) : - this.client.channels.get(id)); + getPayload(data, store, id, partialType, cache) { + const existing = store.get(id); + if (!existing && this.client.options.partials.includes(partialType)) { + return store.add(data, cache); + } + return existing; } - getMessage(data, channel, cache = true) { + getChannel(data) { + const id = data.channel_id || data.id; + return data.channel || this.getPayload({ + id, + guild_id: data.guild_id, + }, this.client.channels, id, PartialTypes.CHANNEL); + } + + getMessage(data, channel, cache) { const id = data.message_id || data.id; - return data.message || (this.client.options.partials.includes(PartialTypes.MESSAGE) ? - channel.messages.add({ - id, - channel_id: channel.id, - guild_id: data.guild_id || (channel.guild ? channel.guild.id : null), - }, cache) : - channel.messages.get(id)); + return data.message || this.getPayload({ + id, + channel_id: channel.id, + guild_id: data.guild_id || (channel.guild ? channel.guild.id : null), + }, channel.messages, id, PartialTypes.MESSAGE, cache); } getReaction(data, message, user) { - const emojiID = data.emoji.id || decodeURIComponent(data.emoji.name); - const existing = message.reactions.get(emojiID); - if (!existing && this.client.options.partials.includes(PartialTypes.MESSAGE)) { - return message.reactions.add({ - emoji: data.emoji, - count: 0, - me: user.id === this.client.user.id, - }); - } - return existing; + const id = data.emoji.id || decodeURIComponent(data.emoji.name); + return this.getPayload({ + emoji: data.emoji, + count: 0, + me: user.id === this.client.user.id, + }, message.reactions, id, PartialTypes.MESSAGE); } getMember(data, guild) { - const userID = data.user.id; - const existing = guild.members.get(userID); - if (!existing && this.client.options.partials.includes(PartialTypes.GUILD_MEMBER)) { - return guild.members.add({ user: { id: userID } }); - } - return existing; + const id = data.user.id; + return this.getPayload({ + user: { + id, + }, + }, guild.members, id, PartialTypes.GUILD_MEMBER); + } + + getUser(data) { + const id = data.user_id; + return data.user || this.getPayload({ id }, this.client.users, id, PartialTypes.USER); } } diff --git a/src/client/actions/MessageReactionAdd.js b/src/client/actions/MessageReactionAdd.js index 185b980ad..e7ae7e26a 100644 --- a/src/client/actions/MessageReactionAdd.js +++ b/src/client/actions/MessageReactionAdd.js @@ -14,7 +14,7 @@ class MessageReactionAdd extends Action { handle(data) { if (!data.emoji) return false; - const user = data.user || this.client.users.get(data.user_id); + const user = this.getUser(data); if (!user) return false; // Verify channel diff --git a/src/client/actions/MessageReactionRemove.js b/src/client/actions/MessageReactionRemove.js index 4e7995f8e..c6c0d664a 100644 --- a/src/client/actions/MessageReactionRemove.js +++ b/src/client/actions/MessageReactionRemove.js @@ -14,7 +14,7 @@ class MessageReactionRemove extends Action { handle(data) { if (!data.emoji) return false; - const user = this.client.users.get(data.user_id); + const user = this.getUser(data); if (!user) return false; // Verify channel