From 363ead922a5006f3b199af932b8b29ae8913b812 Mon Sep 17 00:00:00 2001 From: Lewdcario Date: Fri, 2 Mar 2018 12:17:10 -0600 Subject: [PATCH] fix: bulkDelete discarding non-cached messages --- src/client/actions/MessageDeleteBulk.js | 20 +++++++++++-------- src/client/rest/RESTMethods.js | 12 +++-------- src/structures/interfaces/TextBasedChannel.js | 14 ++++++------- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/client/actions/MessageDeleteBulk.js b/src/client/actions/MessageDeleteBulk.js index 6d207c2eda8a..30358e463f3c 100644 --- a/src/client/actions/MessageDeleteBulk.js +++ b/src/client/actions/MessageDeleteBulk.js @@ -4,17 +4,21 @@ const Constants = require('../../util/Constants'); class MessageDeleteBulkAction extends Action { handle(data) { - const client = this.client; - const channel = client.channels.get(data.channel_id); - - const ids = data.ids; const messages = new Collection(); - for (const id of ids) { - const message = channel.messages.get(id); - if (message) messages.set(message.id, message); + + if (!data.messages) { + const channel = this.client.channels.get(data.channel_id); + for (const id of data.ids) { + const message = channel.messages.get(id); + if (message) messages.set(message.id, message); + } + } else { + for (const msg of data.messages) { + messages.set(msg.id, msg); + } } - if (messages.size > 0) client.emit(Constants.Events.MESSAGE_BULK_DELETE, messages); + if (messages.size > 0) this.client.emit(Constants.Events.MESSAGE_BULK_DELETE, messages); return { messages }; } } diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js index da5aca3abdf8..f0fd85cf0392 100644 --- a/src/client/rest/RESTMethods.js +++ b/src/client/rest/RESTMethods.js @@ -4,7 +4,6 @@ const Permissions = require('../../util/Permissions'); const Constants = require('../../util/Constants'); const Endpoints = Constants.Endpoints; const Collection = require('../../util/Collection'); -const Snowflake = require('../../util/Snowflake'); const Util = require('../../util/Util'); const User = require('../../structures/User'); @@ -172,18 +171,13 @@ class RESTMethods { return this.rest.makeRequest('post', Endpoints.Guild(guild).ack, true).then(() => guild); } - bulkDeleteMessages(channel, messages, filterOld) { - if (filterOld) { - messages = messages.filter(id => - Date.now() - Snowflake.deconstruct(id).date.getTime() < 1209600000 - ); - } + bulkDeleteMessages(channel, messages) { return this.rest.makeRequest('post', Endpoints.Channel(channel).messages.bulkDelete, true, { - messages, + messages: messages.map(m => m.id), }).then(() => this.client.actions.MessageDeleteBulk.handle({ channel_id: channel.id, - ids: messages, + messages, }).messages ); } diff --git a/src/structures/interfaces/TextBasedChannel.js b/src/structures/interfaces/TextBasedChannel.js index 32b309f5a498..7c03c9b98b16 100644 --- a/src/structures/interfaces/TextBasedChannel.js +++ b/src/structures/interfaces/TextBasedChannel.js @@ -435,16 +435,16 @@ class TextBasedChannel { * .catch(console.error); */ bulkDelete(messages, filterOld = false) { - if (messages instanceof Array || messages instanceof Collection) { - let messageIDs = messages instanceof Collection ? messages.keyArray() : messages.map(m => m.id); + if (messages instanceof Collection) messages = [...messages.values()]; + if (messages instanceof Array) { if (filterOld) { - messageIDs = messageIDs.filter(id => Date.now() - Snowflake.deconstruct(id).date.getTime() < 1209600000); + messages = messages.filter(m => Date.now() - Snowflake.deconstruct(m.id).date.getTime() < 1209600000); } - if (messageIDs.length === 0) return new Collection(); - if (messageIDs.length === 1) { - return this.fetchMessage(messageIDs[0]).then(msg => msg.delete().then(() => new Collection([[msg.id, msg]]))); + if (messages.length === 0) return new Collection(); + if (messages.length === 1) { + return messages[0].delete().then(() => new Collection([[messages[0].id, messages[0]]])); } - return this.client.rest.methods.bulkDeleteMessages(this, messageIDs, filterOld); + return this.client.rest.methods.bulkDeleteMessages(this, messages); } if (!isNaN(messages)) return this.fetchMessages({ limit: messages }).then(msgs => this.bulkDelete(msgs, filterOld)); throw new TypeError('The messages must be an Array, Collection, or number.');