我在拥有数百名用户的公共频道中运行我的机器人.昨天有人进来,只是滥用了它.
我想让任何人使用机器人,但如果他们连续发送垃圾邮件命令,并且如果他们不是像我这样的机器人"所有者",那么我想将它们添加到一个被忽略的列表中,该列表在一小时左右到期.
我想的一种方法是在所有用户中保存所有命令,例如:
({
'meder@freenode': [{command:'.weather 20851', timestamp: 209323023 }],
'jack@efnet': [{command:'.seen john' }]
})
Run Code Online (Sandbox Code Playgroud)
我会设置一个cron作业来每24小时刷新一次,但我基本上会确定一个人是否在15秒的持续时间内发出了X个命令并将它们添加到忽略列表中.
实际上,当我写这个答案时,我想到了一个更好的想法..也许不是存储每个用户命令,只是将机器人的命令存储在列表中并继续推动直到它达到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!') })
});
Run Code Online (Sandbox Code Playgroud)
我很感激有关此事的任何建议.
nmi*_*els 11
这是一个简单的算法:
在执行命令之前和递增用户计数器之后,检查它是否超过你的魔法最大值(上面的15).如果是,请在执行命令之前退出.
这使您可以在一段时间后对限制操作进行评级并原谅过度行为.将您期望的禁令长度除以减量周期,以找到当用户超过您的阈值(100以上)时要设置的数字.如果特定用户在被禁止后继续发送命令,您也可以添加该号码.
| 归档时间: |
|
| 查看次数: |
3922 次 |
| 最近记录: |