实施反垃圾邮件?

时间:2013-06-02 19:57:33

标签: python bots irc

我有一个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,())

所以这个东西不会被卡在一个无限循环中,而这个循环会停止其他一切。这会是一个很好的解决方案,还是我能做的更好?

1 个答案:

答案 0 :(得分:1)

你的逻辑应该就足够了。如果您说:

    if flood.has_key(userName):
        flood[userName] += 1
    else:
        flood[userName] = 1
    if flood[userName] > say 8:
        return 0

如果用户在给定时间段内发送过多次垃圾邮件,那么应该让您的机器人忽略该用户。你在那里也应该努力清理你的洪水词典。