在带有聊天机器人的 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 );
我正在编写一个响应命令的 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 );