实施反垃圾邮件?

Posted

技术标签:

【中文标题】实施反垃圾邮件?【英文标题】:Implementing an Anti Spamming thing? 【发布时间】:2013-06-02 19:57:33 【问题描述】:

我有一个 IRC 机器人,用于自动化操作。

这是它的一个sn-p:

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...)

所以这个想法是洪水的东西是一本字典,其中列出了最近在机器人命令中输入的用户列表......保留了一些时间,以及他们在其中说了多少次。那个时间段。

这就是我遇到麻烦的地方。必须有一些东西可以重置这个字典,以便用户可以每隔一段时间说一些东西,不是吗?我认为像这样的小事就可以解决问题。

def floodClear():
    global flood
    while 1:
        flood =  # Clear the list
        time.sleep(4) 

但是最好的方法是什么? 在程序的最后,我有一行叫做:

thread.start_new_thread(floodClear,())

这样这个东西就不会被调用,就会陷入一个无限循环,从而停止其他一切。这是一个好的解决方案还是我可以做的更好?

【问题讨论】:

您真的应该将analyseIRCText 重构为一个类,并将adminListuserListcommandPatflood 作为实例属性。全局变量通常是bad idea。 【参考方案1】:

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

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

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

【讨论】:

嗯...我已经想通了。我想我会接受它,因为你的答案是唯一的,而且在技术上并没有错……

以上是关于实施反垃圾邮件?的主要内容,如果未能解决你的问题,请参考以下文章

反垃圾邮件系统|基于Springboot+vue 实现反垃圾邮件系统

反垃圾邮件系统|基于Springboot+vue 实现反垃圾邮件系统

垃圾邮件猛增6成,我们靠什么抵御垃圾邮件

如何改进反垃圾邮件功能 discord.py?

反垃圾邮件电子邮件链接

邮件安全防护之反垃圾邮件开源软件ASSP