interaction collector discord.js 收集在收集器声明之后执行的所有交互

interaction collector discord.js collects all interactions that are executed after the collector declaration

意思:斜杠命令的响应中有一些内容和一个按钮。按钮的任务是删除消息。我们设法做到的是强制按钮删除消息,但问题是不仅删除了按钮所在的消息,还有其他消息。

const {
  MessageEmbed,
  MessageActionRow,
  MessageButton
} = require('discord.js')
const {
  SlashCommandBuilder
} = require('@discordjs/builders')
const Color = 'RANDOM'
module.exports = {
    name: 'Name',
    data: new SlashCommandBuilder()
      .setName('Name')
      .setDescription('Description')
      .addStringOption(option => option.setName('choice')
        .setDescription('Description')
        .setRequired(true)
        .addChoice('choice1', 'choice1')
        .addChoice('choice2', 'choice2')
        .addChoice('choice3', 'choice3') 
    async run(interaction) {
          const Embed = new MessageEmbed()
            .setColor(Color)
            .setTimestamp()
            .setImage(url)
          const Btns = new MessageActionRow()
            .addComponents(new MessageButton()
              .setCustomId('DeleteMsg')
              .setStyle('DANGER')
              .setLabel('Удалить сообщение (Только автор или администратор)'))
          interaction.reply({
            embeds: [Embed],
            components: [Btns]
          })
          try {
            const collector = interaction.channel.createMessageComponentCollector({
              time: 60000
            })
            collector.on('collect', async i => {
              interaction.deleteReply()
            })
          } catch (error) {
            console.log(error)
          }
   }
}

好的,首先,您应该始终向您的组件收集器添加一个过滤器。 (要收集多少项目,检查正确的用户是否使用了您的组件,...)

您还应该有一个 真实 自定义 ID(如 UUID 或类似的东西),因为如果在同一个频道中多次调用您的命令,那么您的自定义 ID 将不会'不再是自定义的,可以被频道中的每个收藏家 运行 收集。