如何让我的命令忽略其他用户,但允许原始用户响应?

时间:2020-04-28 22:48:37

标签: javascript discord.js

我正在尝试执行一个work命令,该命令需要正确的答案才能兑现。当原始“问题”和答案之间没有任何消息时,它工作得很好,但是,如果有任何消息打断了它,则它会完全抵消其余的消息。我几乎可以确定这是我的过滤器存在的问题,但是我不知道如何解决。我已经看了几个YouTube视频,还阅读了一些帮助论坛的帖子,但仍然无法正常使用。

日志给出以下错误Cannot read property 'content' of undefined,当“用户2”在“用户1”使用原始work命令之后但在“用户1”可以使用正确答案之前说出任何内容时,发生此错误案例“火”

我已经尝试过filter,甚至可以想到的所有方式。我还尝试摆脱Authorid,而仅使用message.author.id。我还用相同的filter部分换了作者,这使代码正常工作,但仍然无法达到我想要的方式。

我想我主要的大问题是,我如何才能忽略其他任何用户的输入,但仍然允许原始命令用户继续?

我对建议的部分进行了编辑,但是命令仍然以错误消息结尾。它可以为发件人进行过滤,因为它可以在原始作者做出响应时很好地运行,但是如果其他人做出了响应,它将恢复为错误。

else {
    message.channel.send(question).then(r => {
      const filter = msg => msg.author.id === message.author.id;
      };
      message.channel.awaitMessages(filter, { max: 1 }).then(collected => {
        const response = collected.first();
        let answer = response.content;
        if (result === 0 && answer.toLowerCase() === "fire") {
          let embed = new Discord.RichEmbed()
            .setTitle(`${message.author.username} went to work!`)
            .setColor("#ffd1dc")
            .setDescription(`You received ${amount} Quoins!`)
            .setFooter(
              message.member.user.username,
              message.member.user.displayAvatarURL
            );
          message.channel.send(embed);
          db.add(`qnhCurrency_${message.author.id}`, amount);
          db.set(`work_${message.author.id}`, Date.now());
          return;
        }

1 个答案:

答案 0 :(得分:1)

您的filter需要检查命令author是否做出了回复,将其用作您的filterconst filter = msg => msg.author.id === message.author.id