diff --git a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js index d2e408580..900c51d9c 100644 --- a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js +++ b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js @@ -286,56 +286,44 @@ class TextBasedChannel { } /** - * Bulk deletes given messages that are newer than two weeks. + * Bulk deletes given messages up to 2 weeks old. * @param {Collection|MessageResolvable[]|number} messages * Messages or number of messages to delete * @param {boolean} [filterOld=false] Filter messages to remove those which are older than two weeks automatically - * @returns {Promise>} Returns the deleted messages + * @returns {Promise} Returns the deleted messages ids * @example * // Bulk delete messages * channel.bulkDelete(5) - * .then(messages => console.log(`Bulk deleted ${messages.size} messages`)) + * .then(messages => console.log(`Bulk deleted ${messages.length} messages`)) * .catch(console.error); */ async bulkDelete(messages, filterOld = false) { if (Array.isArray(messages) || messages instanceof Collection) { let messageIds = messages instanceof Collection ? [...messages.keys()] : messages.map(message => message.id ?? message); + if (filterOld) { messageIds = messageIds.filter( id => Date.now() - DiscordSnowflake.timestampFrom(id) < MaxBulkDeletableMessageAge, ); } - if (messageIds.length === 0) return new Collection(); + + if (messageIds.length === 0) return []; + if (messageIds.length === 1) { - const message = this.client.actions.MessageDelete.getMessage( - { - message_id: messageIds[0], - }, - this, - ); await this.client.rest.delete(Routes.channelMessage(this.id, messageIds[0])); - return message ? new Collection([[message.id, message]]) : new Collection(); + return messageIds; } + await this.client.rest.post(Routes.channelBulkDelete(this.id), { body: { messages: messageIds } }); - return messageIds.reduce( - (col, id) => - col.set( - id, - this.client.actions.MessageDeleteBulk.getMessage( - { - message_id: id, - }, - this, - ), - ), - new Collection(), - ); + return messageIds; } - if (!isNaN(messages)) { + + if (!Number.isNaN(messages)) { const msgs = await this.messages.fetch({ limit: messages }); return this.bulkDelete(msgs, filterOld); } + throw new DiscordjsTypeError(ErrorCodes.MessageBulkDeleteType); } diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 56deac2a6..a5ef67f41 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -4584,7 +4584,7 @@ export interface TextBasedChannelFields | readonly MessageResolvable[] | number, filterOld?: boolean, - ): Promise>; + ): Promise; createMessageComponentCollector( options?: MessageChannelCollectorOptionsParams, ): InteractionCollector;