chatcleaner: initial letter repetition check
This commit is contained in:
+4
-2
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user