首页 > 解决方案 > Mineflayer:让机器人只回复一次

问题描述

我是 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

解决方案


注意是2019年;请在现代 NodeJS 环境中使用 let/const 而不是 var ,而不是在未使用绑定“this”时使用=>unnamed s。functionIE,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;
});

推荐阅读