Trouble with collector and interactions

Here's the part of my code that's causing errors:
async function handleListReactions(interaction) { //line 237
if (!reactions || Object.keys(reactions).length === 0) {
console.log("No reactions configured.");
return interaction.reply({
content: "No reactions configured.",
ephemeral: true,
});
}

let page = 0;
const itemsPerPage = 5; //line 247
const keys = Object.keys(reactions);
const totalPages = Math.ceil(keys.length / itemsPerPage);

const createEmbed = () => {
const start = page * itemsPerPage;
const currentItems = keys.slice(start, start + itemsPerPage);
return new EmbedBuilder()
.setTitle("Reactions List")
.setDescription(
currentItems //line 257
.map(
(key) =>
`**Trigger:** ${key}\n**Emoji:** ${
reactions[key].emoji || "None"
}\n**Message:** ${reactions[key].message || "None"}`
)
.join("\n\n")
)
.setColor(0x0099ff)
.setFooter({ text: `Page ${page + 1} of ${totalPages}` }); //line 267
};

await interaction.reply({
embeds: [createEmbed()],
components: [createPaginationRow()],
ephemeral: true,
});

const message = await interaction.fetchReply();
const collector = message.createMessageComponentCollector({ //line 277
componentType: 2,
time: 600000,
});

collector.on("collect", async (i) => {
console.log("Button interaction received");
await i.deferUpdate().catch(console.error);
const action = i.customId;

if (action === "next" && page < totalPages - 1) { //line 287
page++;
} else if (action === "previous" && page > 0) {
page--;
} else {
return i.followUp({
content: "No more pages in that direction.",
ephemeral: true,
});
}

await i //line 298
.update({
embeds: [createEmbed()],
components: [createPaginationRow()],
})
.catch((error) => console.error("Failed to update interaction:", error));
});

collector.on("end", () => {
interaction //line 307
.editReply({ components: [] })
.catch((error) => console.error("Failed to clear components:", error));
});

function createPaginationRow() {
return new ActionRowBuilder().addComponents(
new ButtonBuilder()
.setCustomId("previous")
.setLabel("Previous")
.setStyle(ButtonStyle.Primary) //line 317
.setDisabled(page === 0),
new ButtonBuilder()
.setCustomId("next")
.setLabel("Next")
.setStyle(ButtonStyle.Primary)
.setDisabled(page >= totalPages - 1)
);
}
} //line 326
async function handleListReactions(interaction) { //line 237
if (!reactions || Object.keys(reactions).length === 0) {
console.log("No reactions configured.");
return interaction.reply({
content: "No reactions configured.",
ephemeral: true,
});
}

let page = 0;
const itemsPerPage = 5; //line 247
const keys = Object.keys(reactions);
const totalPages = Math.ceil(keys.length / itemsPerPage);

const createEmbed = () => {
const start = page * itemsPerPage;
const currentItems = keys.slice(start, start + itemsPerPage);
return new EmbedBuilder()
.setTitle("Reactions List")
.setDescription(
currentItems //line 257
.map(
(key) =>
`**Trigger:** ${key}\n**Emoji:** ${
reactions[key].emoji || "None"
}\n**Message:** ${reactions[key].message || "None"}`
)
.join("\n\n")
)
.setColor(0x0099ff)
.setFooter({ text: `Page ${page + 1} of ${totalPages}` }); //line 267
};

await interaction.reply({
embeds: [createEmbed()],
components: [createPaginationRow()],
ephemeral: true,
});

const message = await interaction.fetchReply();
const collector = message.createMessageComponentCollector({ //line 277
componentType: 2,
time: 600000,
});

collector.on("collect", async (i) => {
console.log("Button interaction received");
await i.deferUpdate().catch(console.error);
const action = i.customId;

if (action === "next" && page < totalPages - 1) { //line 287
page++;
} else if (action === "previous" && page > 0) {
page--;
} else {
return i.followUp({
content: "No more pages in that direction.",
ephemeral: true,
});
}

await i //line 298
.update({
embeds: [createEmbed()],
components: [createPaginationRow()],
})
.catch((error) => console.error("Failed to update interaction:", error));
});

collector.on("end", () => {
interaction //line 307
.editReply({ components: [] })
.catch((error) => console.error("Failed to clear components:", error));
});

function createPaginationRow() {
return new ActionRowBuilder().addComponents(
new ButtonBuilder()
.setCustomId("previous")
.setLabel("Previous")
.setStyle(ButtonStyle.Primary) //line 317
.setDisabled(page === 0),
new ButtonBuilder()
.setCustomId("next")
.setLabel("Next")
.setStyle(ButtonStyle.Primary)
.setDisabled(page >= totalPages - 1)
);
}
} //line 326
DT
d.js toolkit18d ago
- What's your exact discord.js npm list discord.js and node node -v version? - Not a discord.js issue? Check out #other-js-ts. - Consider reading #how-to-get-help to improve your question! - Explain what exactly your issue is. - Post the full error stack trace, not just the top part! - Show your code! - Issue solved? Press the button! - Marked as resolved by OP
P
P'titeLouise17d ago
The output in the console:
Logged in as TestBotLouise#8536
index.js:122

Checking if reactions are configured...
index.js:238

Button interaction received
index.js:284

DiscordAPIError[10062]: Unknown interaction
at handleErrors (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:722:13)
at process.processTicksAndRejections (c:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\lib\internal\process\task_queues.js:95:5)
at async BurstHandler.runRequest (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:826:23)
at async _REST.request (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:1266:22)
at async ButtonInteraction.deferUpdate (c:\Users\PtiteLouise\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:200:5)
at async InteractionCollector.<anonymous> (C:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\index.js:285:5) {requestBody: {…}, rawError: {…}, code: 10062, status: 404, method: 'POST', …}
index.js:285

Failed to update interaction: DiscordAPIError[40060]: Interaction has already been acknowledged.
at handleErrors (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:722:13)
at process.processTicksAndRejections (c:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\lib\internal\process\task_queues.js:95:5)
at async BurstHandler.runRequest (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:826:23)
at async _REST.request (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:1266:22)
at async ButtonInteraction.update (c:\Users\PtiteLouise\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:233:5)
at async InteractionCollector.<anonymous> (C:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\index.js:299:5) {requestBody: {…}, rawError: {…}, code: 40060, status: 400, method: 'POST', …}
index.js:304
Logged in as TestBotLouise#8536
index.js:122

Checking if reactions are configured...
index.js:238

Button interaction received
index.js:284

DiscordAPIError[10062]: Unknown interaction
at handleErrors (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:722:13)
at process.processTicksAndRejections (c:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\lib\internal\process\task_queues.js:95:5)
at async BurstHandler.runRequest (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:826:23)
at async _REST.request (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:1266:22)
at async ButtonInteraction.deferUpdate (c:\Users\PtiteLouise\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:200:5)
at async InteractionCollector.<anonymous> (C:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\index.js:285:5) {requestBody: {…}, rawError: {…}, code: 10062, status: 404, method: 'POST', …}
index.js:285

Failed to update interaction: DiscordAPIError[40060]: Interaction has already been acknowledged.
at handleErrors (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:722:13)
at process.processTicksAndRejections (c:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\lib\internal\process\task_queues.js:95:5)
at async BurstHandler.runRequest (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:826:23)
at async _REST.request (C:\Users\PtiteLouise\node_modules\@discordjs\rest\dist\index.js:1266:22)
at async ButtonInteraction.update (c:\Users\PtiteLouise\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:233:5)
at async InteractionCollector.<anonymous> (C:\Users\PtiteLouise\Desktop\hehe\Reaction Bot\index.js:299:5) {requestBody: {…}, rawError: {…}, code: 40060, status: 400, method: 'POST', …}
index.js:304
Well, when I type the command it fetches all the reactions and creates the embed, but when I press the 'Next' button (since the 'Previous' is disabled on the first page) it usually crashes. The weird thing is that sometimes it goes to the next page before crashing. I'll have a look @Qjuh Thank you! I fixed it thank to you
Want results from more Discord servers?
Add your server
More Posts
unknown interactionhello everyone i have a ticket bot and when the admin want to close the ticket and press the button What are the exact differences between a Webhook and a Webhook client?I've read the page on the [discordjs.guide](https://discordjs.guide/popular-topics/webhooks.html#whaChecking if a user is mobiile```JS client.on('messageCreate', async (message) => { // Check if the user is online and has preSharding QuestionsHello, As my bot is nearly reaching the 2k servers. I need to prepare it to sharding but I have soRepeating interactionIs there a way to use the 'interaction.update' multiple times? So i can make like one button after aWhat Discord.js features have the potential to hit the limit/go over the set Discord API limits?Where can I even find Discord's API limits? I just want to make sure that what I am doing with my boError when i do npm install discord.jsi don’t know how to fix this at all and i’m beyond confused i’ve tried so many times i am useing VisSimple question, how can I check if an incoming message is *specifically* a slash command?How can I check to see if an incoming message (messageCreate) is a slash command? Sometimes a typo cdiscord voice enginehello im just asking if someone got an alternative discord voice engine that work on windowsDeleting Ephemeral MessagesIs there any sort of way to reply to an interaction privately and then delete the reply?Button Automatically PressingHello! Im currently working on a bot using oauth2. Im in the middle of rewriting how i handle refresBot joins the vc but audio doesn't playyes the path is correct. ```js var { voice } = message.member if(!voice.channelId) return mCommand handler changeWould it be possible (is there an example) of a command handler, that looks into a folder with all oMessage listener only on certain channels?Hey there! So I have this: ```js module.exports = { name: Events.MessageCreate, async execu