Discord.js-通过方法获得执行命令的多个反应

Discord.js-通过方法获得执行命令的多个反应,discord.js,Discord.js,我目前正在做一个关于Tictatcoe的小游戏,我的想法是这样做,而不是在频道中不断地插入询问对方下一步行动的内容,而是简单地根据反应来做,从9个反应中选择1个(当然,如果其他玩家已经选择了它,您将无法再次选择它) 我从来没有真正处理过需要多个反应的问题,因此我想请您帮助我如何准确地使消息命令的执行不是一次性的,而是一直持续到最终有赢家为止 到目前为止,在我编写的代码中,这确实可以工作2次,但随后它会随机停止,不再工作 此外,当我试图将一个点声明为x或圆时,该点将完全变为空白 请帮忙 到目前为止

我目前正在做一个关于Tictatcoe的小游戏,我的想法是这样做,而不是在频道中不断地插入询问对方下一步行动的内容,而是简单地根据反应来做,从9个反应中选择1个(当然,如果其他玩家已经选择了它,您将无法再次选择它)

我从来没有真正处理过需要多个反应的问题,因此我想请您帮助我如何准确地使消息命令的执行不是一次性的,而是一直持续到最终有赢家为止

到目前为止,在我编写的代码中,这确实可以工作2次,但随后它会随机停止,不再工作

此外,当我试图将一个点声明为x或圆时,该点将完全变为空白

请帮忙

到目前为止,我掌握的代码是:


编辑:我现在还发现机器人在第一种情况下会跳过整个代码'因此,每次循环时,它都会打印出'i',并且它似乎会立即打印出数字0-8,这意味着它没有正确地遍历代码。

我认为您最好使用的是一个
反应收集器。
。它是一个临时反应侦听器,附加到消息。示例代码如下:


const msg = await message.channel.send('tic tac toe test');

const acceptedEmojis = ['↖️', '⬆️', '↗️', '⬅️', '⏺️', '➡️', '↙️', '⬇️', '↘️']

 const filter = (reaction, user) => {
                return acceptedEmojis.includes(reaction.emoji.name) && user.id === turnId;
            }
//here you create the collector. It has following attributes: it stops after 10 minutes or after 2 minutes of not collecting anything. 
const collector = msg.createReactionCollector(filter, { time: 600000, idle: 120000});

//here you start the listener
collector.on('collect', (reaction, user) => {
  if (reaction.emoji.name === '↖️') {
    //remove the reaction
    await msg.reactions.resolve('↖️')
    acceptedEmojis.splice(acceptedEmojis.indexOf('↖️'), 1);
    //rest of your code...

  } else if (reaction.emoji.name === '⬆️') {
    ...
  }
});