以下代码不会导致控制台出错。键入命令后,第一行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.`)
}
})
}
我一直在寻找解决此问题的方法,但大多数方法都涉及私人消息传递,或者所告知的内容对我不起作用。这些尝试中没有任何错误。看起来好像根本没有看回复。
感谢所有帮助!非常感谢!
答案 0 :(得分:0)
message.channel.awaitMessages(filter, {
max: 1,
}).then(...);
max
表示将要处理的消息的最大数量为1:这意味着如果作者未发送下一条消息,则该漫游器将停止监听新消息。另一个消息甚至可能是您的漫游器的回复,因为您不必等待设置awaitMessages
之前的完成。
尝试使用maxMatches
代替max
。
message.channel.awaitMessages(filter, {
maxMatches: 1,
}).then(...);
话虽如此,您希望获胜者能够发送该消息,因此您需要更改filter
功能。
您首先需要获取获胜者的User对象,然后使filter
使其检查其ID。
let winnerUser = message.mentions.users.first();
let filter = m => m.author.id == winnerUser.id;
您也可以匹配简单提及的ID,但我发现使用该对象更容易。