Mineflayer:让漫游器仅回复一次

时间:2019-10-20 17:26:49

标签: javascript

我是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);
});

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

1 个答案:

答案 0 :(得分:0)

N.B。是2019年;如果没有使用绑定的“ this”,请在现代NodeJS环境中使用let / const over var和=>而不是未命名的functionconst bot = mineflayer...

每次触发“聊天”事件时,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;
});