diff --git a/src/client/actions/Action.js b/src/client/actions/Action.js index 0b03c071be22..7f21318b4d37 100644 --- a/src/client/actions/Action.js +++ b/src/client/actions/Action.js @@ -23,47 +23,52 @@ class GenericAction { return data; } + 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; + } + 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)); + return data.channel || this.getPayload({ + id, + guild_id: data.guild_id, + }, this.client.channels, id, PartialTypes.CHANNEL); } - getMessage(data, channel, cache = true) { + 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 185b980ade1b..e7ae7e26a79f 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 4e7995f8e0a4..c6c0d664a807 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 diff --git a/src/structures/Message.js b/src/structures/Message.js index c390ac231b76..d66124c9e803 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -454,11 +454,7 @@ class Message extends Base { */ delete({ timeout = 0, reason } = {}) { if (timeout <= 0) { - return this.channel.messages.remove(this.id, reason).then(() => - this.client.actions.MessageDelete.handle({ - id: this.id, - channel_id: this.channel.id, - }).message); + return this.channel.messages.remove(this.id, reason).then(() => this); } else { return new Promise(resolve => { this.client.setTimeout(() => {