等待对机器人消息的反应

时间:2019-10-28 14:52:22

标签: javascript discord.js

我正在尝试制作一种民意测验程序,以计算对消息的反应。该漫游器会发送一条消息,并对它做出反应,并计算对该消息的反应。

当我使用awaitReactions时,then中没有处理反应。

代码如下:

channel.send(mess)
 .then(async m => {
       await m.react(ok);
       await m.react(ko);
       await m.react(maybe);
       m.awaitReactions((r, u) => { console.log(`filter:${u.username}`); return true; }, {max: 100000})
        .then(collected => {
             console.log("Reacted");
             collected.forEach(c => { console.log(c); });
         })
          .catch(collected => {
              console.log("Catch");
          });
});

对生成的消息作出反应时,仅打印的console.log是过滤器功能中的消息。

为什么console.logthen中的catch没有执行?

编辑:在awaitRections的函数参数中添加return。添加退货并不能解决问题。

1 个答案:

答案 0 :(得分:0)

当您等待反应时,当到达选项对象中传递的参数之一(如时间已到或达到反应的最大值)时,将解决承诺。如果未达到任何参数,则无法解决承诺。就您而言,您最多只能给出反应(100000),而这永远不会达到。

例如,要等待30秒才能获得投票结果,您可以执行以下操作:

m.awaitReactions((r, u) => { console.log(`filter:${u.username}`); return true; }, { time: 30000 })
    .then(collected => {
         console.log("Collector ended");
         // Collected is a collection with all the reactions collected
         console.log(collected);
     })
     .catch(collected => {
          console.log("No reaction collected");
     });

如果您想执行示例中的操作,当某人做出反应时,console.log为“ Reacted”,则需要使用MessageCollector而不是message.awaitReactions。您可以这样做:

let collector = message.createReactionCollector((r, u) => { console.log(`filter:${u.username}`); return true; });
collector.on("collect", (reaction, user) => {
     console.log("Reacted");
});