mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-19 21:13:30 +01:00
fix: bulkDelete discarding non-cached messages
This commit is contained in:
@@ -4,17 +4,21 @@ const Constants = require('../../util/Constants');
|
|||||||
|
|
||||||
class MessageDeleteBulkAction extends Action {
|
class MessageDeleteBulkAction extends Action {
|
||||||
handle(data) {
|
handle(data) {
|
||||||
const client = this.client;
|
|
||||||
const channel = client.channels.get(data.channel_id);
|
|
||||||
|
|
||||||
const ids = data.ids;
|
|
||||||
const messages = new Collection();
|
const messages = new Collection();
|
||||||
for (const id of ids) {
|
|
||||||
const message = channel.messages.get(id);
|
if (!data.messages) {
|
||||||
if (message) messages.set(message.id, message);
|
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 };
|
return { messages };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ const Permissions = require('../../util/Permissions');
|
|||||||
const Constants = require('../../util/Constants');
|
const Constants = require('../../util/Constants');
|
||||||
const Endpoints = Constants.Endpoints;
|
const Endpoints = Constants.Endpoints;
|
||||||
const Collection = require('../../util/Collection');
|
const Collection = require('../../util/Collection');
|
||||||
const Snowflake = require('../../util/Snowflake');
|
|
||||||
const Util = require('../../util/Util');
|
const Util = require('../../util/Util');
|
||||||
|
|
||||||
const User = require('../../structures/User');
|
const User = require('../../structures/User');
|
||||||
@@ -172,18 +171,13 @@ class RESTMethods {
|
|||||||
return this.rest.makeRequest('post', Endpoints.Guild(guild).ack, true).then(() => guild);
|
return this.rest.makeRequest('post', Endpoints.Guild(guild).ack, true).then(() => guild);
|
||||||
}
|
}
|
||||||
|
|
||||||
bulkDeleteMessages(channel, messages, filterOld) {
|
bulkDeleteMessages(channel, messages) {
|
||||||
if (filterOld) {
|
|
||||||
messages = messages.filter(id =>
|
|
||||||
Date.now() - Snowflake.deconstruct(id).date.getTime() < 1209600000
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return this.rest.makeRequest('post', Endpoints.Channel(channel).messages.bulkDelete, true, {
|
return this.rest.makeRequest('post', Endpoints.Channel(channel).messages.bulkDelete, true, {
|
||||||
messages,
|
messages: messages.map(m => m.id),
|
||||||
}).then(() =>
|
}).then(() =>
|
||||||
this.client.actions.MessageDeleteBulk.handle({
|
this.client.actions.MessageDeleteBulk.handle({
|
||||||
channel_id: channel.id,
|
channel_id: channel.id,
|
||||||
ids: messages,
|
messages,
|
||||||
}).messages
|
}).messages
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -435,16 +435,16 @@ class TextBasedChannel {
|
|||||||
* .catch(console.error);
|
* .catch(console.error);
|
||||||
*/
|
*/
|
||||||
bulkDelete(messages, filterOld = false) {
|
bulkDelete(messages, filterOld = false) {
|
||||||
if (messages instanceof Array || messages instanceof Collection) {
|
if (messages instanceof Collection) messages = [...messages.values()];
|
||||||
let messageIDs = messages instanceof Collection ? messages.keyArray() : messages.map(m => m.id);
|
if (messages instanceof Array) {
|
||||||
if (filterOld) {
|
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 (messages.length === 0) return new Collection();
|
||||||
if (messageIDs.length === 1) {
|
if (messages.length === 1) {
|
||||||
return this.fetchMessage(messageIDs[0]).then(msg => msg.delete().then(() => new Collection([[msg.id, msg]])));
|
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));
|
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.');
|
throw new TypeError('The messages must be an Array, Collection, or number.');
|
||||||
|
|||||||
Reference in New Issue
Block a user