不和谐.js具有"结束"事件的多个收集器的 v14 问题



我正在尝试用discord.js制作一个命令,您可以在其中选择按钮。然后,机器人会根据您的选择编辑消息。

因此,我在与collector = commandMessage.createMessageComponentCollector({ componentType: ComponentType.Button, filter, time: 10000,max: 1})的交互响应中添加了一个收集器。然后,我为这个收集器添加了两个事件collectend句柄。

但是,当我多次调用我的命令时,事件end只在最后一次命令调用的消息上触发(即使在不同的通道中,也好像其他收集器不存在,即使其他收集器应该在超时后触发它们的结束(

这是完整的代码:

async execute(interaction) {
let quoteEmbed = new EmbedBuilder()
// [... creation of embed ...]
row = new ActionRowBuilder()
// [... creation of buttons ...]
commandMessage = await interaction.reply({ embeds: [quoteEmbed], components: [row], fetchReply: true });
const filter = (i) => i.user.id === interaction.user.id;
collector = commandMessage.createMessageComponentCollector({ componentType: ComponentType.Button, filter, time: 10000,max: 1});
collector.on('collect', async i => {
console.log(`Collected interaction for message ${i.message.id}`)
// Create new ActionRow to update
let newActionRowEmbeds = i.message.components.map(
// [... create new buttons from old one as disabled ...]
)
quoteEmbed = EmbedBuilder.from(i.message.embeds[0]);
// [... update embed ...]
await i.update({ embeds: [quoteEmbed], components: newActionRowEmbeds })
});
collector.on('end', async collected => {
console.log(`Collector of message ${collector.messageId} ended.`)
if (!collected.size) {
// Create new ActionRow to update
let newActionRowEmbeds = collector.options.message.components.map(
// [... create new buttons from old one as disabled ...]
)
quoteEmbed = EmbedBuilder.from(collector.options.message.embeds[0]);
// [... update embed ...]
await collector.options.message.edit({ embeds: [quoteEmbed], components: newActionRowEmbeds })
}
});
return commandMessage;
}

我觉得当我在另一个收集器打开的情况下调用该命令时,新的收集器会覆盖上一个收集器,然后collector.options.message只给我最后一条命令调用消息。

但奇怪的是,所有调用都在各自的超时时间结束,但每个调用都有带有相同最后一条消息的collector.options.message,尽管它不是该消息的收集器。

有人有主意吗?我试图在discord.js服务器上寻求帮助,但没有成功。

我终于发现了问题,我忘记了创建收集器的let。。。

let collector = commandMessage.createMessageComponentCollector({ componentType: ComponentType.Button, filter, time: 10000, max: 1 });

最新更新