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(...);
话虽如此,您希望获胜者能够发送该消息,因此您需要更改 filter
功能。
您首先需要获取获胜者的用户对象,然后创建 filter
以便检查他们的 ID。
let winnerUser = message.mentions.users.first();
let filter = m => m.author.id == winnerUser.id;
您也可以匹配简单提及的 id,但我发现使用对象更容易。
以下代码不会导致控制台出现错误。在我键入命令后,第一行 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(...);
话虽如此,您希望获胜者能够发送该消息,因此您需要更改 filter
功能。
您首先需要获取获胜者的用户对象,然后创建 filter
以便检查他们的 ID。
let winnerUser = message.mentions.users.first();
let filter = m => m.author.id == winnerUser.id;
您也可以匹配简单提及的 id,但我发现使用对象更容易。