28 Май
Написано Админ | Категория: sysadmin, Интернет, Полезное, Программы для ПК
Очень быстро у администратора DC++ хаба встает проблема фильтрации сообщений в чате. Чаще всего это связано с отдельно взятыми представителями примато-подобных, которые нарочито общаются исключительно ненормативной лексикой, при этом хамят и оскорбляют остальных участников чата. Вторая причина - постоянный флуд ссылками на свои домашние хабы.
Для решения данной проблемы можно использовать разные способы. Есть масса ботов и скриптов, которые решают с разной степенью успешности такие вопросы. В данной же статье мы рассмотрим, как можно написать простой плагин для фильтрации сообщений чата.
Все что делает данный плагин - читает сообщения главного чата, сравнивает строки с имеющимися шаблонами - и заменяет найденные "нехорошие" сообщения произвольными фразами.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #ifndef CPCL_H #define CPCL_H #include <cvhplugin.h> #include <cconndc.h> using namespace nDirectConnect; using namespace nDirectConnect::nPlugin; class cpiCl : public cVHPlugin { public: cpiCl(); virtual ~cpiCl(); virtual void OnLoad(cServerDC* server); virtual bool RegisterAll(); virtual bool OnParsedMsgChat(cConnDC * conn, cMessageDC *); }; #endif |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <iostream> #include <fstream> #include <time.h> #include <algorithm> #include <cctype> #include <string> #include "config.h" #include "filter.h" cpiCl::cpiCl() { mName = "chatfilter"; mVersion = "1.0.0"; }; void cpiCl::OnLoad(cServerDC* server) { cVHPlugin::OnLoad(server); }; cpiCl::~cpiCl() { }; bool cpiCl::RegisterAll() { RegisterCallBack("VH_OnParsedMsgChat"); }; bool cpiCl::OnParsedMsgChat(cConnDC * conn, cMessageDC *msg) { string &message = msg->ChunkString(eCH_CH_MSG); string tmpstr = message; std::transform(tmpstr.begin(), tmpstr.end(), tmpstr.begin(), (int(*)(int)) std::tolower); string::size_type loc = tmpstr.find("матюк",0); if (loc != string::npos) message = "йа афца!!!"; msg->ApplyChunk(eCH_CH_MSG); return true; }; REGISTER_PLUGIN(cpiCl); |
Компилируем, включаем через команду !plugin - и наслаждаемся работой. Теперь если кто-либо в главном окне чата напишет слово "матюк" (или оно просто будет присутствовать в предложении), то вместо сообщения все увидят фразу "йа афца!!!".
Плагин простой. Но эффективный. Дальнейшие улучшения можно развить, например, в работу с MySQL для гибкого конфигурирования.
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
|---|---|---|---|---|---|---|
| « Апр | Июн » | |||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
Один ответ
arcda
Сентябрь 10th, 2008 в 3:40 дп
1Отличная статья, спасибо!
RSS комментарии · TrackBack URI
Оставить комментарий