等待在公共频道回答问题
下面的代码是导致没有错误控制台。我键入命令后,第一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.`)
}
})
}
我一直在寻求办法解决这个问题,但是大多数涉及私人信息或什么告诉我不起作用。在任何一次的尝试都没有错误。这似乎只是它甚至没有看的答复。
感谢您的任何和所有帮助!这是非常感谢!
回答如下:message.channel.awaitMessages(filter, {
max: 1,
}).then(...);
这max
意味着,将被处理为1消息maximun数:这意味着,如果不被笔者发来的一条消息,机器人将停止侦听新的消息。其他消息甚至可以是你的机器人的回复,因为你不能等待的设置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,但我觉得它更容易使用的对象,而不是。
等待在公共频道回答问题
下面的代码是导致没有错误控制台。我键入命令后,第一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.`)
}
})
}
我一直在寻求办法解决这个问题,但是大多数涉及私人信息或什么告诉我不起作用。在任何一次的尝试都没有错误。这似乎只是它甚至没有看的答复。
感谢您的任何和所有帮助!这是非常感谢!
回答如下:message.channel.awaitMessages(filter, {
max: 1,
}).then(...);
这max
意味着,将被处理为1消息maximun数:这意味着,如果不被笔者发来的一条消息,机器人将停止侦听新的消息。其他消息甚至可以是你的机器人的回复,因为你不能等待的设置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,但我觉得它更容易使用的对象,而不是。