在带有聊天机器人的 Nodejs 中正确使用 setTimeout()

Using setTimout() correctly in Nodejs with a chat bot

我正在编写一个响应命令的 IRC 聊天机器人。我的问题是命令有冷却时间。

我的想法是这样的:

setTimeout(function() {
  client.on('chat', function (channel,user, message, self) {
    if (message === 'command') {
      // do stuff
    }
  });
}, 5000);

每当用户输入聊天内容时,机器人都会做出反应。然后它会检查用户是否键入了命令,然后它显然会执行操作。

但是我这里的idea不行。机器人不断响应命令。我只是希望他5秒前已经说话了,不要再回答。

我用定时器和 date.now 之类的东西试过了,但我想如果我定义一个像

这样的变量
var timer = 100000000000000

变量将始终具有该值,我不能更改一次,因为它将被重新定义。

http://www.tmijs.org/docs/ 是我为我的机器人使用的库

编辑:

function doStuff(channel, user, message, self) {
      // do stuff
};


client.on('chat', function(channel, user, message, self) {
  if (message === 'command') {
    setTimeout( function() {
      client.on('chat', doStuff(channel, user, message,self));
    }, 5000);
    doStuff(channel, user, message, self);
  }
});

那是因为您的 setTimeout 处理程序只为 chat 事件设置处理程序;它实际上并没有调用处理程序。什么时候调用处理程序?每次发送 chat 消息。因此,改为在收到 chat 事件时设置超时。类似于:

var handleMsg = function(channel, user, message, self) {
  if (message === 'command') {
    setTimeout( function() {
      client.once( 'chat', handleMsg );
    }, 5000);
    // do stuff
  }
};

client.once('chat', handleMsg );