首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mineflayer:让机器人只回复一次

Mineflayer:让机器人只回复一次
EN

Stack Overflow用户
提问于 2019-10-21 01:26:50
回答 1查看 470关注 0票数 0

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

我不知道如何解决这个问题,我试着把它放在一个函数中,这样它就只会被调用,但它看起来就像是打开了一个侦听器,即使在函数运行完之后也会继续说消息。

代码语言:javascript
复制
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);
});

任何让它在被调用时只回复消息的方法,或者只运行一次该事件的方法都会有所帮助。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-10-21 02:16:41

N.B.现在是2019年;在现代NodeJS环境中,请使用let/const over var,并且在未使用绑定“function**s”时,请使用,而不是未命名的var。**即const bot = mineflayer...

每次触发'chat‘事件时,on处理程序都会运行。使用bot.once不会让你一直检查你是否真的回复了。您是js的新手,所以我不会深入研究用于删除事件侦听器的API。

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

代码语言:javascript
复制
let responded = false;
bot.on('chat', (username, message) => {
  if (responded) return;
  if (username === bot.username) return;

  bot.chat(`Received ${message}`);
  responded = true;
  return;
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58475475

复制
相关文章

相似问题

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