Я пишу бот IRC-чата, который отвечает на команды. У меня проблема с кулдауном по командам.Использование setTimout() правильно в Nodejs с ботом чата
Моя идея заключается в следующем:
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/ Есть библиотека, я использую для моего бота
Edit:
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);
}
});
У меня вопрос. почему вы используете client.once? мой бот как-то работает только на моем личном канале, а не на других. При использовании client.on он каким-то образом распечатывал слишком много вещей и сам был запрещен – gempir
'client.once()' является просто ярлыком для выражения «обрабатывать это событие при следующем запуске» вместо «обрабатывать это событие каждый раз» он стреляет ». Это в основном ярлык для 'client.on', с логикой для отсоединения обработчика события после первого вызова. См. Https://nodejs.org/api/events.html#events_emitter_once_event_listener. Здесь вы можете использовать 'client.on', но если это так, вам нужно поместить некоторую логику в обработчик' click', чтобы игнорировать сообщения, которые произошли до дроссель 5000MS поднят, так как теперь он будет вызываться повторно. – hacksalot
в порядке, но тогда мне не имеет смысла, почему команда не будет работать с другими каналами. Как мне сделать это с помощью обработчика кликов? – gempir