Skip to main content

Create Collectors

Some of your commands or features are sometimes based on user interactions. E.g. if a user presses a button and you want to know whether it was pressed. This is actually done by listening to the interactionCreate event.

But sometimes you need to access locale variables or don't want to "hardcode" the part.

That's why it's sometimes recommended to create collectors.

Collectors are listeners that listen to a specific event. In addition, you can provide a filter, so you only receive certain interactions.

Use a Collector

Template The template code is used below. You must have the EventManager part to use the collector feature. :::

We have a pre-made class for collectors which you can find here.

const Discord = require('discordeno.js')
const filter = m =>
m.data?.customId === 'warn_modal' && m.user.id === interaction.user.id
const listener = client.eventListener // When the eventListener property is named different
const collector = new Discord.Collector('interactionCreate', {
client: client,
timeout: 60000,
filter,
max: 20,
listener,
})
collector.on('collect', m => {
const interaction = client.interactions.forge(m)
// Stop Collector
// collector.stop();
})

// Fires on a timeout, when the collector has reached the max amount of interactions or when it has been closed
collector.on('end', collected => {
// Map of Collected Interactions
console.log(collected)
})

As you can see, this opens up many possibilities. You can listen to any event and get the interaction you need.

Collector Options

filter: Function, just fire the event if the filter returns true. timeout: Number, the time in milliseconds until the collector times out. max: Number, the max amount of interactions the collector can collect. listener: Function, the listener that will be fired when the collector collects an interaction. Just required when client property is named differently.