【问题标题】:Mineflayer: make bot only reply onceMineflayer:让机器人只回复一次
【发布时间】:2019-10-20 17:26:49
【问题描述】:

我是 js 和 mineflayer 的新手,所以我想知道如何让 bot.on('chat') 运行一次,比如聊天中的第一条消息。在这个例子中,机器人只是回复每一条发送的消息,回复同样的消息。

我不知道如何解决这个问题,我尝试将它放在一个函数中,所以它只在那时调用,但它似乎就像打开一个侦听器并在函数运行完成后继续说消息。

var bot = mineflayer.createBot({
  host: "localhost", 
  port: 25565,     
  username: "", 
  password: "",          
  version: "1.8.9"        
});

bot.on('chat', function(username, message) {

  if (username === bot.username) return;

  bot.chat(message);
});

使其仅在被调用时回复消息或仅运行该事件一次的任何方法都可以提供帮助。谢谢!

【问题讨论】:

    标签: javascript


    【解决方案1】:

    注意现在是 2019 年;请在现代 NodeJS 环境中使用 let/const 而不是 var,如果不使用绑定的“this”,请使用 => 而不是未命名的 functions。const bot = mineflayer...

    每次触发 'chat' 事件时,on 处理程序都会运行。使用 bot.once 将不允许您继续检查您是否实际响应。您是 js 新手,所以我不会深入研究用于删除事件侦听器的 API。

    鉴于这些限制,让我们保持简单。您可以有一个外部布尔标志,它还允许您在运行时的稍后时间通过在以下代码中的 if (responded) return; 之前轻松地切换打开/关闭。 您的代码可能如下所示:

    let responded = false;
    bot.on('chat', (username, message) => {
      if (responded) return;
      if (username === bot.username) return;
    
      bot.chat(`Received ${message}`);
      responded = true;
      return;
    });
    

    【讨论】:

      猜你喜欢
      • 2020-09-16
      • 1970-01-01
      • 2023-03-21
      • 2020-01-25
      • 2020-11-07
      • 1970-01-01
      • 2020-12-09
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多