(js的新手)我对“我的世界”机器人提出了异议,它在一个文件中使用了discord.js,而在“我的世界”机器人中使用了“扫雷”。当一个命令在不协调的情况下运行时,它会让机器人运行它,并运行一个函数来检测聊天中的正确行,问题是即使在它检测到消息之后,它也会一直保持并永远读取每一行。这意味着如果其他人输入了它检测到的干扰内容,并认为这是正确的聊天行。
我也不确定如何让它停止,在运行事件一次后,或者在聊天中找到线路后,我可能需要它在运行一次后停止,以防线路由于某种原因没有出现。
function balOutput() {
bot.on('message', jsonMsg => {
if (Array.isArray(jsonMsg.json.extra)) {
var message = '';
jsonMsg.json.extra.forEach(function(element) {
message = message + element.text;
});
if (message.toLowerCase().includes('\'s balance')) {
var msg = message;
fs.writeFile('output.txt', msg, err => {
if (err) throw err;
});
} else if (message.toLowerCase().includes('is not locally online')) {
var msg = 'That player is not online!';
fs.writeFile('output.txt', msg, err => {
if (err) throw err;
});
}
}
continue;
});
}一旦不一致命令通过,该函数就会被调用,并在“我的世界”中运行。它在这一次确实有效,但随后其他消息破坏了它。问题是我不能仅仅使用正则表达式,并让它检测玩家说它消息,因为,其他一些命令需要使用完全相同的输出运行,但被放在不同的位置,所以我需要它不触发baloutput函数中的bot.on(' message ')。在运行一次之后,我几乎需要关闭该事件。
发布于 2019-10-22 18:51:39
我不能完全确定jsonMsg代表的是什么,因为Discord.js的message事件传递了一个Message对象作为其第一个参数,该对象没有.json属性,而您期望jsonMsg.json.extra是一个数组,有时似乎是这样的。
但是,无论何时调用balOutput函数,似乎都是在向bot的message事件添加另一个侦听器回调函数。这可能会导致你面临的行为,在这种情况下,事情只在第一次有效。你只需要添加一个回调函数。
您可能还希望考虑使用普通的for循环,而不是.forEach(),在第一次满足break;条件时,您可以使用if从该循环中跳出。
https://stackoverflow.com/questions/58474633
复制相似问题