(js新手) 我正在与minecraft bot产生冲突,该文件在一个文件上使用discord.js,并为minecraft bot使用mineflayer。当命令以不一致的方式运行时,它将使机器人运行它并运行一个功能,该功能可检测聊天中的正确行,即使在检测到消息后,问题仍然存在,它会一直保持打开状态并永远读取每一行。意思是如果有人键入它检测到的内容会干扰并认为那是正确的聊天内容。
我不确定在使事件运行一次之后还是在聊天中找到该行之后如何使其停止,以防万一该行由于某种原因而没有出现,我可能需要在运行该行之后使其停止。
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;
});
}
一旦discord命令通过并在Minecraft中运行该函数,就会调用该函数。它确实可以工作一次,但是随后其他消息破坏了它。问题是我不能只使用regex并使其检测到玩家说出的消息,因为其他一些命令需要以完全相同的输出运行,但是放置在不同的位置,所以我不需要它来触发bot.on。 baloutput函数中的(“消息”)...运行一次之后,我几乎需要关闭该事件。
答案 0 :(得分:0)
我不确定jsonMsg
代表什么,因为Discord.js的message
事件传递了一个Message
对象作为它的第一个参数,而该对象没有{{1 }}属性,而您期望.json
是一个数组,有时似乎是这种情况。
但是,每当调用jsonMsg.json.extra
函数时,似乎都在向balOutput
的{{1}}事件添加另一个侦听器回调函数。这可能会导致您所面对的问题,而这种情况只会在第一次出现时起作用。您只想添加一个回调。
您可能还想研究使用普通的bot
循环,而不是message
,因此您可以在for
的那一刻开始使用.forEach()
首先满足条件。