首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止事件(mineflayer)

如何停止事件(mineflayer)
EN

Stack Overflow用户
提问于 2019-10-20 23:45:44
回答 1查看 674关注 0票数 0

(js的新手)我对“我的世界”机器人提出了异议,它在一个文件中使用了discord.js,而在“我的世界”机器人中使用了“扫雷”。当一个命令在不协调的情况下运行时,它会让机器人运行它,并运行一个函数来检测聊天中的正确行,问题是即使在它检测到消息之后,它也会一直保持并永远读取每一行。这意味着如果其他人输入了它检测到的干扰内容,并认为这是正确的聊天行。

我也不确定如何让它停止,在运行事件一次后,或者在聊天中找到线路后,我可能需要它在运行一次后停止,以防线路由于某种原因没有出现。

代码语言:javascript
复制
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 ')。在运行一次之后,我几乎需要关闭该事件。

EN

回答 1

Stack Overflow用户

发布于 2019-10-22 18:51:39

我不能完全确定jsonMsg代表的是什么,因为Discord.js的message事件传递了一个Message对象作为其第一个参数,该对象没有.json属性,而您期望jsonMsg.json.extra是一个数组,有时似乎是这样的。

但是,无论何时调用balOutput函数,似乎都是在向botmessage事件添加另一个侦听器回调函数。这可能会导致你面临的行为,在这种情况下,事情只在第一次有效。你只需要添加一个回调函数。

您可能还希望考虑使用普通的for循环,而不是.forEach(),在第一次满足break;条件时,您可以使用if从该循环中跳出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58474633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档