【问题标题】:How to stop a event (mineflayer)如何停止事件(mineflayer)
【发布时间】:2020-02-16 20:30:36
【问题描述】:

(js 新手) 我正在与我的世界机器人不和谐,它在一个文件上使用 discord.js,为我的世界机器人使用 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 中运行,就会调用该函数。它确实工作了一次,但随后其他消息毁了它。问题是我不能只使用正则表达式并让它检测到玩家说它的消息,因为,其他一些命令需要以完全相同的输出运行但被放置在不同的位置,所以我不需要它来触发 bot.on ('message') 在 baloutput 函数中......我几乎需要在运行一次后关闭该事件。

【问题讨论】:

  • 当这个函数执行时,bot.on() 现在会监听每一条进来的消息。我假设你在执行特定命令时调用这个函数?如果是这样,为什么不直接删除 bot.on() 并将消息传递给函数以便它可以使用呢?

标签: javascript discord.js


【解决方案1】:

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

但是,每当您调用 balOutput 函数时,似乎您正在向 botmessage 事件添加另一个侦听器回调函数。这可能会导致您所面临的行为,其中事情只在第一次起作用。您只需要添加一个回调。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2016-05-03
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多