Káromkodások szűrése

Indította Sunny, 2012 november 01, 09:59:03 DÉLUTÁN

Előző téma - Következő téma

Sunny

Sziasztok,

Valakinek nincs esetleg régről, vagy bárhonnan egy káromkodásszűrő scriptje?
Vagy valamilyen megoldása arra, hogy a káromkodásokat #&@$ jelekre cserélje?
Keresgéltem a fórumon, de nem találtam erre megoldást :(

AximCore

#1
Hello, van egy scriptem erre még régen írtam, adatbázisból szedi ki a káromkodásokat amiket tiltani szeretnél, egyetlen kis szépség hibája van, hogy a kis-nagy betűket megkülönbözteti ezért pl a szAr-t már nem írná felül ha a db-be csak szar-ként szerepel. ( egyik megoldása ennek ha a string karaktereit kisbetűvé alakítod vizsgálat előtt és utána vizsgáltatod pl:
Kód (cpp) Kijelölés
void lowerCase(string& strToConvert)
{
   for(unsigned int i=0;i<strToConvert.length();i++)
   {
      strToConvert[i] = tolower(strToConvert[i]);
   }
}




SCRIPT :
Kód (cpp) Kijelölés
/*
Készítette Tóth Máté (AximCore) 2012
*/
class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
public:
    System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");

if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}

do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());

}while(result->NextRow());
}

void GetCensuredWord(std::string& msg)
{
for(uint64 i=0; i<Words.size(); i++)
{
if(msg == Words[i] ){ msg = "!&@$ß"; }
}
}



void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg);
}
void OnChat(Player /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
    GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg);
}
};

void AddSC_System_Censure()
{
new System_Censure();
}



És a teljes megoldás :D :

Kód (cpp) Kijelölés
/*
Készítette Tóth Máté (AximCore) 2012
*/
class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
public:
    System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");

if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}

do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());

}while(result->NextRow());
}

void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
   strToConvert[i] = tolower(strToConvert[i]);
}
}

void GetCensuredWord(std::string& msg)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
if(msg == Words[i] ){ msg = "!&@$ß"; }
}
}



void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg);
}
void OnChat(Player /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
    GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg);
}
};

void AddSC_System_Censure()
{
new System_Censure();
}


World adatbázisba pedig csinálsz egy player_karomkodas táblát amibe a egy mezőt létrehozol ami típusa text tehát szöveg.

UI: Ez sem jó hiszen szöveg nem fog meg egyezni egy szóval. Ezért nem == operatorral kel hanem más fvgel pl find...
"Tanítani lehet az ostobát, de gondolkodásra bírni nem."
A Talmud

Windows Firewall
http://devopsreactions.tumblr.com/

Why use Windows, if you have open doors... to Linux

Sunny


Bluerák


MacBook Pro 13' 2.26 GHZ, 4 GB RAM - White
iPhone 4S 16GB - Black
iPad 3 - Black

NEW PC:
Asus EAH6670 (1GB 128 bit)
AMD FX AM3+ (4x3.8GHZ)
ASRock 970 EXTREME3
8GB RAM

hunti

Axim megoldása jobb, adatbázisból dolgozik, és szavanként ellenőriz, viszont amit belinkeltél mondatokat ellenőriz, csak 20 féle káromkodást lehet meghatározni, és mindig újra kell forgatni a core-t ha változtatunk valamit. De minden esetre nem rossz.

AximCore

Így már szövegben ha megtalálja azt a részt akkor elnyeli ( nem írja ki ) a szöveget. Majd utána nézek ha lesz kedvem hozzá vagy azt se bánom ha ti oldjátok meg.  :D

Kód (cpp) Kijelölés
/*
Készítette Tóth Máté (AximCore) 2012
*/

#include <string>

class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
public:
    System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");

if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">> Nem sikerult betolteni a tablat. A 'player_karomkodas' tabla ures.");
return;
}

do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());

}while(result->NextRow());
}

void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
   strToConvert[i] = tolower(strToConvert[i]);
}
}

void GetCensuredWord(std::string& msg)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
int Find = msg.find(Words[i]);
if( Find != -1 )
{
msg = "!&@$ß×";
}
}
}



void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg);
}
void OnChat(Player /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
    GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg);
}

void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg);
}
};

void AddSC_System_Censure()
{
new System_Censure();
}
"Tanítani lehet az ostobát, de gondolkodásra bírni nem."
A Talmud

Windows Firewall
http://devopsreactions.tumblr.com/

Why use Windows, if you have open doors... to Linux

hunti

Esetleg ha még van kedved módosítani rajta, meg lehetne csinálni hogy logolja azokat akik rosszak, meg hogy mit rosszalkodtak ;)

AximCore

Idézetet írta: hunti Dátum 2012 november 08, 08:19:46 DÉLUTÁN
Esetleg ha még van kedved módosítani rajta, meg lehetne csinálni hogy logolja azokat akik rosszak, meg hogy mit rosszalkodtak ;)

Így logolja azt, hogy ki és mit káromkodott, tudom van feles nyitás/zárás( nem hatékony, már akkor jobb lenne ha konstruktor/de-konstruktorba írom a fájl nyitás/zárás részt )  meg a emuba is van erre írva külön egy log rendszer, de estére megteszi. Majd holnap ha haza értem. ;)

Kód (cpp) Kijelölés
/*
Készítette Tóth Máté (AximCore) 2012
*/

#include <string>
#include <fstream>

class System_Censure : public PlayerScript
{
std::vector<std::string> Words;

fstream File;
public:
    System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");

if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}

do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());

}while(result->NextRow());
}

void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
   strToConvert[i] = tolower(strToConvert[i]);
}
}

void WriteFile(std::string& msg,Player *player){
File.open("blasphemers.txt", fstream::out | fstream::app);

if(File.is_open())
{
File << "Name: " << player->GetName() << " by: " << msg << std::endl;
File.close();
}

}

void GetCensuredWord(std::string& msg,Player *player)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
int Find = msg.find(Words[i]);
if( Find != -1 )
{
WriteFile(msg,player);
msg = "!&@$ß×";
}
}
}



void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
    GetCensuredWord(msg,player);
}

void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg,player);
}

void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg,player);
}

void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg,player);
}
};

void AddSC_System_Censure()
{
new System_Censure();
}
"Tanítani lehet az ostobát, de gondolkodásra bírni nem."
A Talmud

Windows Firewall
http://devopsreactions.tumblr.com/

Why use Windows, if you have open doors... to Linux

hunti

Esetleg egy mysql insert nem lenne célratörőbb? :)

AximCore

Idézetet írta: hunti Dátum 2012 november 08, 09:37:46 DÉLUTÁN
Esetleg egy mysql insert nem lenne célratörőbb? :)

Igaz. :) Így sikerült megoldanom...

Kód (cpp) Kijelölés
/*
Készítette Tóth Máté (AximCore) 2012
*/

#include <string>

class System_Censure : public PlayerScript
{
std::vector<std::string> Words;

public:
    System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");

if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}

do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());

}while(result->NextRow());
}

void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
   strToConvert[i] = tolower(strToConvert[i]);
}
}

void GetCensuredWord(std::string& msg,Player *player)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
int Find = msg.find(Words[i]);
if( Find != -1 )
{
const char* MSG = msg.c_str();
CharacterDatabase.PExecute("INSERT INTO karomkodas (Name,Message,Date) VALUES ('%s','%s',CURDATE()) ", player->GetName() ,MSG);
msg = "!&@$ß×";
}
}
}



void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
    GetCensuredWord(msg,player);
}

void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg,player);
}

void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg,player);
}

void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg,player);
}
};

void AddSC_System_Censure()
{
new System_Censure();
}


Kód (mysql) Kijelölés
DROP TABLE IF EXISTS `karomkodas`;
CREATE TABLE `karomkodas` (
  `Name` varchar(40) NOT NULL,
  `Message` varchar(500) NOT NULL,
  `Date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"Tanítani lehet az ostobát, de gondolkodásra bírni nem."
A Talmud

Windows Firewall
http://devopsreactions.tumblr.com/

Why use Windows, if you have open doors... to Linux

Powered by EzPortal