如何停止按钮收集器?
问题是我需要处理按钮按下,这样如果我按下一个新按钮,前一个按钮的收集器就会停止,这样就不会出现未知交互或交互已经确认的错误:
DiscordAPIError[10062]: Unknown interaction
at handleErrors (C:\Users\user\Desktop\Discord Bot Version 1.0.0 (Beta)\node_modules\@discordjs\rest\dist\index.js:640:13)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async BurstHandler.runRequest (C:\Users\user\Desktop\Discord Bot Version 1.0.0 (Beta)\node_modules\@discordjs\rest\dist\index.js:736:23)
at async REST.request (C:\Users\user\Desktop\Discord Bot Version 1.0.0 (Beta)\node_modules\@discordjs\rest\dist\index.js:1387:22)
at async ButtonInteraction.update (C:\Users\user\Desktop\Discord Bot Version 1.0.0 (Beta)\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:233:5)
at async InteractionCollector.<anonymous> (C:\Users\user\Desktop\Discord Bot Version 1.0.0 (Beta)\buttons\moderates\listRaiting.js:51:7) {
requestBody: { files: [], json: { type: 7, data: [Object] } },
rawError: { message: 'Unknown interaction', code: 10062 },
code: 10062,
status: 404,
method: 'POST',
url: ''
我的代码:
const { SlashCommandBuilder } = require('@discordjs/builders');
const {
ActionRowBuilder,
ButtonBuilder,
EmbedBuilder,
ButtonStyle,
} = require('discord.js');
const muteButton = require('../../buttons/moderates/muteButton.js');
const unMuteButton = require('../../buttons/moderates/unMuteButton.js');
const warnButton = require('../../buttons/moderates/warnButton.js');
const unWarnButton = require('../../buttons/moderates/unWarnButton.js');
const listRaitingButton = require('../../buttons/moderates/listRaiting.js');
const infractionButton = require('../../buttons/moderates/infractionButton.js');
const raitingButton = require('../../buttons/moderates/raitingButton.js');
const unRaitingButton = require('../../buttons/moderates/unraitingButton.js');
const unraitingButton = require('../../buttons/moderates/unraitingButton.js');
const collectors = {};
async function createCollector(interaction, customId, executeFunction) {
const filter = i => i.user.id === interaction.user.id && i.isButton() && i.customId === customId;
const collector = interaction.channel.createMessageComponentCollector({ filter, time: 30000 });
collector.on('collect', async i => {
executeFunction(i);
});
collector.on('end', collected => {
console.log(`Collector для кнопки ${customId} завершен. Собрано ${collected.size} элементов.`);
});
}
module.exports = {
data: new SlashCommandBuilder()
.setName('moderate')
.setDescription('Предоставляет модераторскую панель с действиями, такими как мут, размут, предупреждение и т.д.'),
async execute(interaction) {
const member = interaction.member;
const moderatorRole = member.roles.cache.find(r => r.name === 'Модератор');
if (!moderatorRole) {
return interaction.reply({ content: 'Вы не являетесь Модератором, у вас нет прав для использования этой команды.', ephemeral: true });
}
for (let collector in collectors) {
collectors[collector].stop();
}
const filter = i => i.user.id === interaction.user.id;
const collector = interaction.channel.createMessageComponentCollector({ filter, time: 30000 });
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('mute')
.setEmoji('