我正在编写一个能够回答命令的IRC聊天机器人。我的问题是对命令进行冷却。
我的想法是:
setTimeout(function() {
client.on('chat', function (channel,user, message, self) {
if (message === 'command') {
// do stuff
}
});
}, 5000);
每次用户输入聊天时,机器人都会做出反应。然后它会检查用户是否输入了命令,然后它显然会填充。
但我的想法不起作用。机器人不断回答命令。我只是希望他在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);
}
});
答案 0 :(得分:1)
那是因为你的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 );