首页 > 解决方案 > 检测某人何时对机器人创建的消息做出反应

问题描述

因此,目标是让用户选择通过发送消息来恢复已删除的消息,用 Y 和 N 对该消息做出反应,并检测同一用户何时对 Y 做出反应。

我写出了所有代码,看起来还不错,但似乎变量“问题”失去了对最初存储在其中的消息对象的跟踪,因为它抛出了UnhandledPromiseRejectionWarning: TypeError: question.on is not a function. 我测试过

我知道这样的事情是可能的,因为Toasty经常依赖它。

免责声明:我.then()的代码中有,但我不完全确定我是否正确使用它。我以前从未使用过它,但仔细研究了一下,它似乎适合这项工作。

其他免责声明:我在这个网站上看到了另一个类似问题的帖子,但老实说我不明白答案,我觉得这段代码是问题的更简洁版本。

client.on('messageDelete', function(msg){
  if (msg.author.id == 42){ //I'll plug my discord account in a different post,tyvm
    msg.channel.send ("I saw that, FOOL");
    msg.channel.send ("Would you like me to bring your message back from the grave? (Y/N)").then (function (question){
      question.react("");
      question.react("");
      question.on('messageReactionAdd',function (reaction, author){
        if (reaction == "" && author.id == 42){
          msg.channel.send ("FOOL: " +msg.content);
        }
      });
    });
  }
});

标签: javascriptdiscorddiscord.js

解决方案


所以question是消息对象,它没有messageReactionAdd监听器,也就是clients监听器,它是这样使用的:

client.on('messageReactionAdd', function(msg){
    //code
})

您真正需要的是awaitReaction消息对象上的方法。

const filter = (reaction, user) => reaction.emoji.name === '' // or whatever
question.awaitReactions(filter, { time: 15000 })
  .then(col=>{
      console.log('reacted')
  })

推荐阅读