adding multi spammer support to chatcleaner

This commit is contained in:
doitux
2009-08-18 20:37:45 +00:00
parent faa31d202a
commit 44d32b7376
5 changed files with 41 additions and 28 deletions
-1
View File
@@ -17,7 +17,6 @@ CleanerServer::CleanerServer(): config(0), blockConnection(false), m_recvBufUsed
clientSecret = QString::fromUtf8(config->readConfigString("ClientAuthString").c_str()); clientSecret = QString::fromUtf8(config->readConfigString("ClientAuthString").c_str());
serverSecret = QString::fromUtf8(config->readConfigString("ServerAuthString").c_str()); serverSecret = QString::fromUtf8(config->readConfigString("ServerAuthString").c_str());
qDebug() << clientSecret << serverSecret;
myMessageFilter = new MessageFilter(config); myMessageFilter = new MessageFilter(config);
tcpServer = new QTcpServer(); tcpServer = new QTcpServer();
+10 -8
View File
@@ -49,10 +49,11 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg)
QMap<unsigned, ClientWarnInfos>::const_iterator i = myClientWarnLevelList.find(playerId); QMap<unsigned, ClientWarnInfos>::const_iterator i = myClientWarnLevelList.find(playerId);
if(i == myClientWarnLevelList.end()) { if(i == myClientWarnLevelList.end()) {
myClientWarnInfos.warnLevel = 1; ClientWarnInfos tmpInfos;
myClientWarnInfos.lastWarnType = offence; tmpInfos.warnLevel = 1;
myClientWarnInfos.nick = nick; tmpInfos.lastWarnType = offence;
myClientWarnLevelList.insert(playerId, myClientWarnInfos); tmpInfos.nick = nick;
myClientWarnLevelList.insert(playerId, tmpInfos);
action = WARN; action = WARN;
} }
else { else {
@@ -64,10 +65,11 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg)
myClientWarnLevelList.remove(i.key()); myClientWarnLevelList.remove(i.key());
} }
else { else {
myClientWarnInfos.warnLevel++; ClientWarnInfos tmpInfos;
myClientWarnInfos.lastWarnType = offence; tmpInfos.warnLevel = i.value().warnLevel+1;
myClientWarnInfos.nick = nick; tmpInfos.lastWarnType = offence;
myClientWarnLevelList.insert(playerId, myClientWarnInfos); tmpInfos.nick = nick;
myClientWarnLevelList.insert(playerId, tmpInfos);
action = WARN; action = WARN;
} }
} }
+1 -1
View File
@@ -31,7 +31,7 @@ private:
int lastWarnType; int lastWarnType;
int warnLevel; int warnLevel;
}; };
ClientWarnInfos myClientWarnInfos;
QMap<unsigned, ClientWarnInfos> myClientWarnLevelList; QMap<unsigned, ClientWarnInfos> myClientWarnLevelList;
int warnLevelToKick; int warnLevelToKick;
+30 -17
View File
@@ -19,31 +19,41 @@ bool TextFloodCheck::run(unsigned playerId) {
QMapIterator<unsigned, TextFloodInfos> it(msgTimesList); QMapIterator<unsigned, TextFloodInfos> it(msgTimesList);
while (it.hasNext()) { while (it.hasNext()) {
it.next(); 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<unsigned, TextFloodInfos>::const_iterator i = msgTimesList.find(playerId); QMap<unsigned, TextFloodInfos>::const_iterator i = msgTimesList.find(playerId);
if(i == msgTimesList.end()) { if(i == msgTimesList.end()) {
myTextFloodInfos.floodLevel = 0; TextFloodInfos tmpInfos1;
myTextFloodInfos.timeStamp = timer.elapsed().total_seconds(); tmpInfos1.floodLevel = 0;
msgTimesList.insert(playerId, myTextFloodInfos); tmpInfos1.timeStamp = timer.elapsed().total_seconds();
msgTimesList.insert(playerId, tmpInfos1);
qDebug () << "Add Player: set player floodlevel to " << tmpInfos1.floodLevel;
} }
else { else {
TextFloodInfos tmpInfos2;
if(timer.elapsed().total_seconds()-i.value().timeStamp <= 1) { if(timer.elapsed().total_seconds()-i.value().timeStamp <= 1) {
if(i.value().floodLevel == textFloodLevelToTrigger) { if(i.value().floodLevel == textFloodLevelToTrigger) {
myTextFloodInfos.floodLevel--; TextFloodInfos tmpInfos3;
// qDebug () << "set player floodlevel to " << myTextFloodInfos.floodLevel << endl; tmpInfos3.floodLevel = i.value().floodLevel-1;
myTextFloodInfos.timeStamp = timer.elapsed().total_seconds(); tmpInfos3.timeStamp = timer.elapsed().total_seconds();
msgTimesList.insert(playerId, myTextFloodInfos); qDebug () << "Trigger: set player floodlevel to " << tmpInfos3.floodLevel;
msgTimesList.insert(playerId, tmpInfos3);
return true; return true;
} }
else { 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(); else {
msgTimesList.insert(playerId, myTextFloodInfos); 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; return false;
} }
@@ -55,13 +65,16 @@ void TextFloodCheck::cleanMsgTimesList() {
it.next(); it.next();
if(timer.elapsed().total_seconds()-it.value().timeStamp > 3) { if(timer.elapsed().total_seconds()-it.value().timeStamp > 3) {
if(it.value().floodLevel == 0) if(it.value().floodLevel == 0) {
msgTimesList.remove(it.key()); msgTimesList.remove(it.key());
qDebug () << "Refresh: player removed from List";
}
else { else {
myTextFloodInfos.floodLevel--; TextFloodInfos tmpInfos;
myTextFloodInfos.timeStamp = it.value().timeStamp; tmpInfos.floodLevel = it.value().floodLevel-1;
msgTimesList.insert(it.key(), myTextFloodInfos); 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; // qDebug() << msgTimesList.count() << it.key() << ": " << it.value().floodLevel << it.value().timeStamp << endl;
@@ -70,6 +83,6 @@ void TextFloodCheck::cleanMsgTimesList() {
void TextFloodCheck::removeNickFromList(unsigned playerId) { void TextFloodCheck::removeNickFromList(unsigned playerId) {
// qDebug() << "id " << playerId << "removed from textfloodcheck list" << endl; qDebug() << "id " << playerId << "removed from textfloodcheck list" << endl;
msgTimesList.remove(playerId); msgTimesList.remove(playerId);
} }
-1
View File
@@ -27,7 +27,6 @@ private:
int floodLevel; int floodLevel;
size_t timeStamp; size_t timeStamp;
}; };
TextFloodInfos myTextFloodInfos;
QMap<unsigned, TextFloodInfos> msgTimesList; QMap<unsigned, TextFloodInfos> msgTimesList;
int textFloodLevelToTrigger; int textFloodLevelToTrigger;