我有一个IRC机器人,我为自动化的东西。
以下是它的片段:
def analyseIRCText(connection, event):
global adminList, userList, commandPat, flood
userName = extractUserName(event.source())
userCommand = event.arguments()[0]
escapedChannel = cleanUserCommand(config.channel).replace('\\.', '\\\\.')
escapedUserCommand = cleanUserCommand(event.arguments()[0])
#print userName, userCommand, escapedChannel, escapedUserCommand
if flood.has_key(userName):
flood[userName] += 1
else:
flood[userName] = 1
... (if flood[userName] > certain number do...)
因此,想法是洪水事物是一个字典,其中保存了最近在某个时间输入机器人命令的用户列表,以及他们已经说了多少次这样的话。所以在那段时间内。
我遇到麻烦的地方。必须有SOMETHING重置这个字典,以便用户可以每隔一段时间说一次,不是吗?我认为像这样的小事可以解决问题。
def floodClear():
global flood
while 1:
flood = {} # Clear the list
time.sleep(4)
但是最好的方法是什么? 在程序结束时,我有一句名为:
thread.start_new_thread(floodClear,())
所以这个东西不会被卡在一个无限循环中,而这个循环会停止其他一切。这会是一个很好的解决方案,还是我能做的更好?
答案 0 :(得分:1)
你的逻辑应该就足够了。如果您说:
if flood.has_key(userName):
flood[userName] += 1
else:
flood[userName] = 1
if flood[userName] > say 8:
return 0
如果用户在给定时间段内发送过多次垃圾邮件,那么应该让您的机器人忽略该用户。你在那里也应该努力清理你的洪水词典。