我认为,最简单的方法是将两个 id 存储在变量中并使用 [message collector][1] 获取下一条消息。就我个人而言,我将创建一个函数,它将有第一个用户、第二个用户、通道和 bool(我将在后面描述)作为参数。并且在函数内部,它将设置新的收集器,限制为 1 和基于 bool 的用户(如果 bool 为 false,则为 user 1,如果为 true,则为 user 2),然后在消息收集事件只需做一些战斗逻辑并使用反向布尔参数再次触发此功能。要开始战斗,只需使用随机布尔值触发此函数。
[1]:https://discord.js.org/#/docs/main/stable/class/MessageCollector
编辑:代码(未经测试,很抱歉出现错误):
function nextFightStep (channel, user1, user2, side /*, some other combat arguments*/) {
//send some info message as dank memers "what do you want to do? punch, defend or end? Type your choice out in chat as it's displayed!" (and target member is side ? user1 : user2)
new Discord.MessageCollector(channel,m => m.author.id == (side ? user1 : user2).user.id,{max:1}).on("collect",message => {
//some fight logic
if (/*continue fight*/) {
nextFightStep(channel, user1, user2, !side /*, new fight arguments*/)
}
else {
//some end fight logic
}
})
}
并使用以下参数触发此函数:发送通道,公会成员 1,公会成员 2,如果其公会成员 1 轮,一些默认战斗参数。