Я запускаю своего бота на общедоступном канале с сотнями пользователей.Вчера пришел человек и просто злоупотребил им.
Я хотел бы разрешить кому-либо использовать бота, но если они последовательно рассылают спам-команды и если они не являются "владельцем" бота, как я, то во время отладки яЯ хотел бы добавить их в список игнорируемых, срок действия которого истекает через час или около того.
Один из способов, который я думаю, - сохранить все команды всех пользователей в словаре, например:
({
'meder@freenode': [{command:'.weather 20851', timestamp: 209323023 }],
'jack@efnet': [{command:'.seen john' }]
})
Я бы настроил задание cron, чтобы очищать его каждые 24 часа, но я бы в основном определил, сделал ли человек X команд за период, скажем, 15 секунд, и добавил бы их в список игнорирования.
На самом деле, когда я пишу этот ответ, я подумал о лучшей идее ... возможно, вместо того, чтобы хранить команды каждого пользователя, просто сохраните команды бота в списке и продолжайте нажимать, пока он не достигнет предела, скажем,15.
lastCommands = [], limit = 5;
function handleCommand( timeObj, action ) {
if ( lastCommands.length < limit ) {
action();
} else {
// enumerate through lastCommands and compare the timestamps of all 5 commands
// if the user is the same for all 5 commands, and...
// if the timestamps are all within the vicinity of 20 seconds
// add the user to the ignoreList
}
}
watch_for('command', function() {
handleCommand({timestamp: 2093293032, user: user}, function(){ message.say('hello there!') })
});
Буду признателен за любые советы по этому вопросу.