public 频道等待回复的问题

Issues awaiting replies in public channel

以下代码不会导致控制台出现错误。在我键入命令后,第一行 message.reply 正确执行,但机器人似乎不承认有人键入 'accept' 或 'deny'。纠结这个很久了。我在私人消息中完成了这样的命令并且它有效。但是由于某种原因,因为这是在 public 频道中,所以它似乎不起作用。

module.exports.run = async(bot, message, args) => {

  //!endbrawl winner [username] loser [username]

  let messageArray = message.content.split(" ")
  let winner = messageArray[2]
  let loser = messageArray[4]

  message.reply(`${message.author} wants to close this brawl with ${winner} as the victor and ${loser} as the loser. \n ${winner}, do you accept the result? If yes, type 'accept'. If not, type 'deny'.`);
  let winnerUser = message.mentions.users.first();
  let filter = m => m.author.id == winnerUser.id;
  message.channel.awaitMessages(filter, {
    maxMatches: 1,
  }).then(collected => {
    if (message.author.bot) return;
    if (collected.first().content === "accept") {
      return message.reply(`${winner} has accepted the proposed result.`)
      // put in code asking loser to agree with proposed result
    } else if (collected.first().content === "deny") {
      return message.reply(`${winner} has denied the proposed result.`)
    } else {
      return message.reply(`${winner}, your reply was invalid.`)
    }
  })
}

我一直在寻找解决此问题的方法,但大多数都涉及私人消息传递或被告知的内容对我不起作用。任何这些尝试都没有错误。似乎它甚至都不看回复。

感谢您的帮助!非常感谢!

message.channel.awaitMessages(filter, {
    max: 1,
  }).then(...);

max 意味着将处理的最大消息数 将被处理 将是 1:这意味着如果下一条消息不是作者发送的机器人将停止收听新消息。另一条消息甚至可能是您的机器人的回复,因为您不会在设置 awaitMessages.
之前等待它完成 尝试使用 maxMatches 而不是 max

message.channel.awaitMessages(filter, {
    maxMatches: 1,
  }).then(...);

参考:MessageCollectorOptions


话虽如此,您希望获胜者能够发送该消息,因此您需要更改 filter 功能。
您首先需要获取获胜者的用户对象,然后创建 filter 以便检查他们的 ID。

let winnerUser = message.mentions.users.first();
let filter = m => m.author.id == winnerUser.id;

您也可以匹配简单提及的 id,但我发现使用对象更容易。