在公共渠道上等待回复的问题

时间:2019-02-09 04:28:00

标签: javascript node.js discord.js

以下代码不会导致控制台出错。键入命令后,第一行message.reply会正确执行,但漫游器似乎无法识别有人键入“接受”或“拒绝”。很长时间以来一直对此感到困惑。我已经在私人消息中完成了这样的命令,并且可以正常工作。但是由于某种原因,由于它是在公共频道中,所以似乎不起作用。

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.`)
    }
  })
}

我一直在寻找解决此问题的方法,但大多数方法都涉及私人消息传递,或者所告知的内容对我不起作用。这些尝试中没有任何错误。看起来好像根本没有看回复。

感谢所有帮助!非常感谢!

1 个答案:

答案 0 :(得分:0)

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

max表示将要处理的消息的最大数量为1:这意味着如果作者未发送下一条消息,则该漫游器将停止监听新消息。另一个消息甚至可能是您的漫游器的回复,因为您不必等待设置awaitMessages之前的完成。
尝试使用maxMatches代替max

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

参考:MessageCollectorOptions


话虽如此,您希望获胜者能够发送该消息,因此您需要更改filter功能。
您首先需要获取获胜者的User对象,然后使filter使其检查其ID。

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

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