【问题标题】:In discord.js, reactionCollector doesn't stop after calling stop() method在 discord.js 中,reactionCollector 在调用 stop() 方法后不会停止
【发布时间】:2020-08-21 08:06:26
【问题描述】:

我正在处理 discord.js 中的机器人,目前正在尝试执行以下操作: 通过触发一个名为tournament prepare 的命令,机器人会等待用户输入reactionCollector,收集想要参加比赛的用户的反应。

稍后,当开始比赛的用户使用命令tournament begin 时,机器人应该关闭收集器,并输出一个包含参加比赛的玩家姓名的列表。

这是我尝试过的:

// initialise the collector
var collector = null;

if(message.content.startsWith(`${prefix}prepare`)) {
  message.channel.send('A message')
    .then(async function (message) {
      await message.react('⚔')

      const filter = (reaction, user) => {
        return reaction.emoji.name === '⚔' && user.id != 705462496646922311
      };
      collector = message.createReactionCollector(filter);
      collector.on('collect', (reaction, user) => {
        // code here
      });
    })
    .catch(function() {
      message.channel.send('Error while adding the reaction. Try again')
    });

}

if(message.content.startsWith(`${prefix}begin`)) {
  if(collector == null) {
    message.channel.send('Error message');
    return;
  }

  collector.stop();
  collector.on('end', collected => {
    // code here
  });
}

在结束事件之前一切正常。 文档说明了 stop() 方法:Stops this collector and emits the end event.

我确信在使用 stop() 方法后收集器会停止,因为我已经调试过它,但由于某些原因,end 事件永远不会被调用。有什么帮助吗?

【问题讨论】:

    标签: events bots discord.js


    【解决方案1】:

    我认为,这是因为你先停止它然后连接事件,所以它不会触发,因为收集器已经结束。

    【讨论】:

    • 这就是问题所在,stop() 应该调用 'end' 事件。
    • 是的,但是看你的代码,它会逐行执行,当你调用 stop() 命令时,仍然没有事件。尝试改变这两行的顺序。
    • @Kyle,随机题外提示:最好将此分析器标记为解决方案:)。
    • 我认为是的(除了这个问题)。但是,您可以将结束事件移动到收集事件下,消息收集器收集事件中的第二个 if 语句(并将其放在结束事件下(在移动结束事件之后))和收集器变量声明您定义它的位置。
    • 我不清楚你写了什么,你能给我看看吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2012-08-27
    • 2016-05-18
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多