From 44d32b73767cfc3bde6ef5a90be8b130c913333f Mon Sep 17 00:00:00 2001 From: doitux Date: Tue, 18 Aug 2009 20:37:45 +0000 Subject: [PATCH] adding multi spammer support to chatcleaner --- src/chatcleaner/cleanerserver.cpp | 1 - src/chatcleaner/messagefilter.cpp | 18 +++++++----- src/chatcleaner/messagefilter.h | 2 +- src/chatcleaner/textfloodcheck.cpp | 47 +++++++++++++++++++----------- src/chatcleaner/textfloodcheck.h | 1 - 5 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/chatcleaner/cleanerserver.cpp b/src/chatcleaner/cleanerserver.cpp index 727ef5d5..8217abc4 100644 --- a/src/chatcleaner/cleanerserver.cpp +++ b/src/chatcleaner/cleanerserver.cpp @@ -17,7 +17,6 @@ CleanerServer::CleanerServer(): config(0), blockConnection(false), m_recvBufUsed clientSecret = QString::fromUtf8(config->readConfigString("ClientAuthString").c_str()); serverSecret = QString::fromUtf8(config->readConfigString("ServerAuthString").c_str()); - qDebug() << clientSecret << serverSecret; myMessageFilter = new MessageFilter(config); tcpServer = new QTcpServer(); diff --git a/src/chatcleaner/messagefilter.cpp b/src/chatcleaner/messagefilter.cpp index cc899d15..3ac543c1 100644 --- a/src/chatcleaner/messagefilter.cpp +++ b/src/chatcleaner/messagefilter.cpp @@ -49,10 +49,11 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg) QMap::const_iterator i = myClientWarnLevelList.find(playerId); if(i == myClientWarnLevelList.end()) { - myClientWarnInfos.warnLevel = 1; - myClientWarnInfos.lastWarnType = offence; - myClientWarnInfos.nick = nick; - myClientWarnLevelList.insert(playerId, myClientWarnInfos); + ClientWarnInfos tmpInfos; + tmpInfos.warnLevel = 1; + tmpInfos.lastWarnType = offence; + tmpInfos.nick = nick; + myClientWarnLevelList.insert(playerId, tmpInfos); action = WARN; } else { @@ -64,10 +65,11 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg) myClientWarnLevelList.remove(i.key()); } else { - myClientWarnInfos.warnLevel++; - myClientWarnInfos.lastWarnType = offence; - myClientWarnInfos.nick = nick; - myClientWarnLevelList.insert(playerId, myClientWarnInfos); + ClientWarnInfos tmpInfos; + tmpInfos.warnLevel = i.value().warnLevel+1; + tmpInfos.lastWarnType = offence; + tmpInfos.nick = nick; + myClientWarnLevelList.insert(playerId, tmpInfos); action = WARN; } } diff --git a/src/chatcleaner/messagefilter.h b/src/chatcleaner/messagefilter.h index c52f615b..7ccc2584 100644 --- a/src/chatcleaner/messagefilter.h +++ b/src/chatcleaner/messagefilter.h @@ -31,7 +31,7 @@ private: int lastWarnType; int warnLevel; }; - ClientWarnInfos myClientWarnInfos; + QMap myClientWarnLevelList; int warnLevelToKick; diff --git a/src/chatcleaner/textfloodcheck.cpp b/src/chatcleaner/textfloodcheck.cpp index 0e5f37af..b4b62a89 100644 --- a/src/chatcleaner/textfloodcheck.cpp +++ b/src/chatcleaner/textfloodcheck.cpp @@ -19,31 +19,41 @@ bool TextFloodCheck::run(unsigned playerId) { QMapIterator it(msgTimesList); while (it.hasNext()) { it.next(); -// qDebug() << msgTimesList.count() << it.key() << ": " << it.value().floodLevel << it.value().timeStamp << endl; +// qDebug() << "counter: " << msgTimesList.count() << " playerid: " << it.key() << " floodlevel: " << it.value().floodLevel << " timestamp: " << it.value().timeStamp; } QMap::const_iterator i = msgTimesList.find(playerId); if(i == msgTimesList.end()) { - myTextFloodInfos.floodLevel = 0; - myTextFloodInfos.timeStamp = timer.elapsed().total_seconds(); - msgTimesList.insert(playerId, myTextFloodInfos); + TextFloodInfos tmpInfos1; + tmpInfos1.floodLevel = 0; + tmpInfos1.timeStamp = timer.elapsed().total_seconds(); + msgTimesList.insert(playerId, tmpInfos1); + qDebug () << "Add Player: set player floodlevel to " << tmpInfos1.floodLevel; } else { + TextFloodInfos tmpInfos2; if(timer.elapsed().total_seconds()-i.value().timeStamp <= 1) { if(i.value().floodLevel == textFloodLevelToTrigger) { - myTextFloodInfos.floodLevel--; -// qDebug () << "set player floodlevel to " << myTextFloodInfos.floodLevel << endl; - myTextFloodInfos.timeStamp = timer.elapsed().total_seconds(); - msgTimesList.insert(playerId, myTextFloodInfos); + TextFloodInfos tmpInfos3; + tmpInfos3.floodLevel = i.value().floodLevel-1; + tmpInfos3.timeStamp = timer.elapsed().total_seconds(); + qDebug () << "Trigger: set player floodlevel to " << tmpInfos3.floodLevel; + msgTimesList.insert(playerId, tmpInfos3); return true; } else { - myTextFloodInfos.floodLevel++; + tmpInfos2.floodLevel = i.value().floodLevel+1; + qDebug () << "Raise: set player floodlevel to " << tmpInfos2.floodLevel << " from " << i.value().floodLevel; } } - myTextFloodInfos.timeStamp = timer.elapsed().total_seconds(); - msgTimesList.insert(playerId, myTextFloodInfos); + else { + tmpInfos2.floodLevel = i.value().floodLevel; + qDebug () << "Keep: player floodlevel is " << tmpInfos2.floodLevel << " from " << i.value().floodLevel; + } + + tmpInfos2.timeStamp = timer.elapsed().total_seconds(); + msgTimesList.insert(playerId, tmpInfos2); } return false; } @@ -55,13 +65,16 @@ void TextFloodCheck::cleanMsgTimesList() { it.next(); if(timer.elapsed().total_seconds()-it.value().timeStamp > 3) { - if(it.value().floodLevel == 0) + if(it.value().floodLevel == 0) { msgTimesList.remove(it.key()); - + qDebug () << "Refresh: player removed from List"; + } else { - myTextFloodInfos.floodLevel--; - myTextFloodInfos.timeStamp = it.value().timeStamp; - msgTimesList.insert(it.key(), myTextFloodInfos); + TextFloodInfos tmpInfos; + tmpInfos.floodLevel = it.value().floodLevel-1; + tmpInfos.timeStamp = it.value().timeStamp; + qDebug () << "Refresh: player floodlevel to " << tmpInfos.floodLevel; + msgTimesList.insert(it.key(), tmpInfos); } } // qDebug() << msgTimesList.count() << it.key() << ": " << it.value().floodLevel << it.value().timeStamp << endl; @@ -70,6 +83,6 @@ void TextFloodCheck::cleanMsgTimesList() { void TextFloodCheck::removeNickFromList(unsigned playerId) { -// qDebug() << "id " << playerId << "removed from textfloodcheck list" << endl; + qDebug() << "id " << playerId << "removed from textfloodcheck list" << endl; msgTimesList.remove(playerId); } diff --git a/src/chatcleaner/textfloodcheck.h b/src/chatcleaner/textfloodcheck.h index 1fef9445..d10232ad 100644 --- a/src/chatcleaner/textfloodcheck.h +++ b/src/chatcleaner/textfloodcheck.h @@ -27,7 +27,6 @@ private: int floodLevel; size_t timeStamp; }; - TextFloodInfos myTextFloodInfos; QMap msgTimesList; int textFloodLevelToTrigger;