chatcleaner: initial letter repetition check

This commit is contained in:
doitux
2009-07-31 11:07:44 +00:00
parent 3e8512a2ea
commit 0a41384d9e
6 changed files with 63 additions and 4 deletions
+4 -2
View File
@@ -27,7 +27,8 @@ SOURCES += chatcleaner.cpp \
tinyxml.cpp \ tinyxml.cpp \
tinyxmlerror.cpp \ tinyxmlerror.cpp \
tinyxmlparser.cpp \ tinyxmlparser.cpp \
capsfloodcheck.cpp capsfloodcheck.cpp \
letterrepeatingcheck.cpp
HEADERS += cleanerserver.h \ HEADERS += cleanerserver.h \
messagefilter.h \ messagefilter.h \
badwordcheck.h \ badwordcheck.h \
@@ -35,4 +36,5 @@ HEADERS += cleanerserver.h \
cleanerconfig.h \ cleanerconfig.h \
tinyxml.h \ tinyxml.h \
tinystr.h \ tinystr.h \
capsfloodcheck.h capsfloodcheck.h \
letterrepeatingcheck.h
+2 -1
View File
@@ -43,7 +43,7 @@ using namespace std;
CleanerConfig::CleanerConfig() CleanerConfig::CleanerConfig()
{ {
// !!!! Revisionsnummer der Configdefaults !!!!! // !!!! Revisionsnummer der Configdefaults !!!!!
configRev = 3; configRev = 4;
// Pfad und Dateinamen setzen // Pfad und Dateinamen setzen
#ifdef _WIN32 #ifdef _WIN32
@@ -117,6 +117,7 @@ CleanerConfig::CleanerConfig()
configList.push_back(ConfigInfo("WarnLevelToKick", CONFIG_TYPE_INT, "2")); configList.push_back(ConfigInfo("WarnLevelToKick", CONFIG_TYPE_INT, "2"));
configList.push_back(ConfigInfo("TextFloodLevelToTrigger", CONFIG_TYPE_INT, "3")); configList.push_back(ConfigInfo("TextFloodLevelToTrigger", CONFIG_TYPE_INT, "3"));
configList.push_back(ConfigInfo("CapsFloodCapsNumberToTrigger", CONFIG_TYPE_INT, "10")); configList.push_back(ConfigInfo("CapsFloodCapsNumberToTrigger", CONFIG_TYPE_INT, "10"));
configList.push_back(ConfigInfo("LetterRepeatingNumberToTrigger", CONFIG_TYPE_INT, "10"));
list<string> badWordsList; list<string> badWordsList;
+25
View File
@@ -0,0 +1,25 @@
#include "letterrepeatingcheck.h"
#include <QtCore>
LetterRepeatingCheck::LetterRepeatingCheck()
{
}
bool LetterRepeatingCheck::run(QString msg)
{
msg = msg.simplified().remove(" ");
QRegExp e(QString(".*(.)\\1{%1,}.*").arg(letterNumberToTrigger-1));
if(e.isValid()) {
if(e.exactMatch(msg)) {
return true;
}
else {
return false;
}
}
else {
qDebug() << "The current Letter Repeating RegExp is invalid" << endl;
return false;
}
}
+19
View File
@@ -0,0 +1,19 @@
#ifndef LETTERREPEATINGCHECK_H
#define LETTERREPEATINGCHECK_H
#include <QtCore>
class LetterRepeatingCheck: public QObject {
Q_OBJECT
public:
LetterRepeatingCheck();
void setLetterNumberToTrigger(int n) { letterNumberToTrigger = n; }
bool run(QString);
private:
int letterNumberToTrigger;
};
#endif // CAPSFLOODCHECK_H
+11 -1
View File
@@ -5,6 +5,7 @@
#include "textfloodcheck.h" #include "textfloodcheck.h"
#include "cleanerconfig.h" #include "cleanerconfig.h"
#include "capsfloodcheck.h" #include "capsfloodcheck.h"
#include "letterrepeatingcheck.h"
enum ActionType { enum ActionType {
NOTHING, NOTHING,
@@ -15,7 +16,8 @@ enum OffenceType {
NONE, NONE,
BAD_WORD, BAD_WORD,
TEXT_FLOOD_LINES, TEXT_FLOOD_LINES,
CAPS_FLOOD CAPS_FLOOD,
LETTER_REPEATING
}; };
MessageFilter::MessageFilter(CleanerConfig *c): config(c) MessageFilter::MessageFilter(CleanerConfig *c): config(c)
@@ -23,6 +25,7 @@ MessageFilter::MessageFilter(CleanerConfig *c): config(c)
myBadWordCheck = new BadWordCheck; myBadWordCheck = new BadWordCheck;
myTextFloodCheck = new TextFloodCheck; myTextFloodCheck = new TextFloodCheck;
myCapsFloodCheck = new CapsFloodCheck; myCapsFloodCheck = new CapsFloodCheck;
myLetterRepeatingCheck = new LetterRepeatingCheck;
} }
QString MessageFilter::check(unsigned playerId, QString nick, QString msg) QString MessageFilter::check(unsigned playerId, QString nick, QString msg)
@@ -34,6 +37,7 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg)
if(myBadWordCheck->run(msg)) offence = BAD_WORD; if(myBadWordCheck->run(msg)) offence = BAD_WORD;
if(myCapsFloodCheck->run(msg)) offence = CAPS_FLOOD; if(myCapsFloodCheck->run(msg)) offence = CAPS_FLOOD;
if(myLetterRepeatingCheck->run(msg)) offence = LETTER_REPEATING;
if(myTextFloodCheck->run(playerId)) offence = TEXT_FLOOD_LINES; if(myTextFloodCheck->run(playerId)) offence = TEXT_FLOOD_LINES;
if(offence){ if(offence){
@@ -82,6 +86,10 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg)
returnMessage = QString ("<PokerTHCleaner> %1: Warning: You've triggered caps flood protection, release your caps!\n").arg(nick); returnMessage = QString ("<PokerTHCleaner> %1: Warning: You've triggered caps flood protection, release your caps!\n").arg(nick);
} }
break; break;
case LETTER_REPEATING: {
returnMessage = QString ("<PokerTHCleaner> %1: Warning: You've triggered letter repeating protection, stop repeating!\n").arg(nick);
}
break;
default:; default:;
} }
} }
@@ -109,4 +117,6 @@ void MessageFilter::refreshConfig() {
myTextFloodCheck->setTextFloodLevelToTrigger(config->readConfigInt("TextFloodLevelToTrigger")); myTextFloodCheck->setTextFloodLevelToTrigger(config->readConfigInt("TextFloodLevelToTrigger"));
myCapsFloodCheck->setCapsNumberToTrigger(config->readConfigInt("CapsFloodCapsNumberToTrigger")); myCapsFloodCheck->setCapsNumberToTrigger(config->readConfigInt("CapsFloodCapsNumberToTrigger"));
myLetterRepeatingCheck->setLetterNumberToTrigger(config->readConfigInt("LetterRepeatingNumberToTrigger"));
} }
+2
View File
@@ -8,6 +8,7 @@ class BadWordCheck;
class TextFloodCheck; class TextFloodCheck;
class CleanerConfig; class CleanerConfig;
class CapsFloodCheck; class CapsFloodCheck;
class LetterRepeatingCheck;
class MessageFilter: public QObject { class MessageFilter: public QObject {
Q_OBJECT Q_OBJECT
@@ -21,6 +22,7 @@ private:
BadWordCheck *myBadWordCheck; BadWordCheck *myBadWordCheck;
TextFloodCheck *myTextFloodCheck; TextFloodCheck *myTextFloodCheck;
CapsFloodCheck *myCapsFloodCheck; CapsFloodCheck *myCapsFloodCheck;
LetterRepeatingCheck *myLetterRepeatingCheck;
struct ClientWarnInfos { struct ClientWarnInfos {
QString nick; QString nick;