diff --git a/src/structures/DMChannel.js b/src/structures/DMChannel.js index 41ea724f2eea..bc78c4400695 100644 --- a/src/structures/DMChannel.js +++ b/src/structures/DMChannel.js @@ -92,7 +92,7 @@ class DMChannel extends Channel { createMessageCollector() {} awaitMessages() {} createMessageComponentInteractionCollector() {} - awaitMessageComponentInteractions() {} + awaitMessageComponentInteraction() {} // Doesn't work on DM channels; bulkDelete() {} } diff --git a/src/structures/Message.js b/src/structures/Message.js index 02d45947ad75..39ace4b9d296 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -440,30 +440,25 @@ class Message extends Base { } /** - * An object containing the same properties as CollectorOptions, but a few more: - * @typedef {MessageComponentInteractionCollectorOptions} AwaitMessageComponentInteractionsOptions - * @property {string[]} [errors] Stop/end reasons that cause the promise to reject - */ - - /** - * Similar to createMessageComponentInteractionCollector but in promise form. - * Resolves with a collection of interactions that pass the specified filter. + * Collects a single component interaction that passes the filter. + * The Promise will reject if the time expires. * @param {CollectorFilter} filter The filter function to use - * @param {AwaitMessageComponentInteractionsOptions} [options={}] Optional options to pass to the internal collector - * @returns {Promise>} + * @param {number} [time] Time to wait for an interaction before rejecting + * @returns {Promise} * @example - * // Create a message component interaction collector + * // Collect a message component interaction * const filter = (interaction) => interaction.customID === 'button' && interaction.user.id === 'someID'; - * message.awaitMessageComponentInteractions(filter, { time: 15000 }) - * .then(collected => console.log(`Collected ${collected.size} interactions`)) + * message.awaitMessageComponentInteraction(filter, 15000) + * .then(interaction => console.log(`${interaction.customID} was clicked!`)) * .catch(console.error); */ - awaitMessageComponentInteractions(filter, options = {}) { + awaitMessageComponentInteraction(filter, time) { return new Promise((resolve, reject) => { - const collector = this.createMessageComponentInteractionCollector(filter, options); - collector.once('end', (interactions, reason) => { - if (options.errors && options.errors.includes(reason)) reject(interactions); - else resolve(interactions); + const collector = this.createMessageComponentInteractionCollector(filter, { max: 1, time }); + collector.once('end', interactions => { + const interaction = interactions.first(); + if (!interaction) reject(new Error('INTERACTION_COLLECTOR_TIMEOUT')); + else resolve(interaction); }); }); } diff --git a/src/structures/TextChannel.js b/src/structures/TextChannel.js index 9eb86b13c1b7..18e0f1bb0e13 100644 --- a/src/structures/TextChannel.js +++ b/src/structures/TextChannel.js @@ -158,7 +158,7 @@ class TextChannel extends GuildChannel { createMessageCollector() {} awaitMessages() {} createMessageComponentInteractionCollector() {} - awaitMessageComponentInteractions() {} + awaitMessageComponentInteraction() {} bulkDelete() {} } diff --git a/src/structures/interfaces/TextBasedChannel.js b/src/structures/interfaces/TextBasedChannel.js index 415d5ad2f60a..ee3dc8fa52cb 100644 --- a/src/structures/interfaces/TextBasedChannel.js +++ b/src/structures/interfaces/TextBasedChannel.js @@ -423,7 +423,7 @@ class TextBasedChannel { 'createMessageCollector', 'awaitMessages', 'createMessageComponentInteractionCollector', - 'awaitMessageComponentInteractions', + 'awaitMessageComponentInteraction', ); } for (const prop of props) {