Очень быстро у администратора DC++ хаба встает проблема фильтрации сообщений в чате. Чаще всего это связано с отдельно взятыми представителями примато-подобных, которые нарочито общаются исключительно ненормативной лексикой, при этом хамят и оскорбляют остальных участников чата. Вторая причина — постоянный флуд ссылками на свои домашние хабы.

Для решения данной проблемы можно использовать разные способы. Есть масса ботов и скриптов, которые решают с разной степенью успешности такие вопросы. В данной же статье мы рассмотрим, как можно написать простой плагин для фильтрации сообщений чата.

Все что делает данный плагин — читает сообщения главного чата, сравнивает строки с имеющимися шаблонами — и заменяет найденные "нехорошие" сообщения произвольными фразами.

 

#ifndef CPCL_H
#define CPCL_H

#include
#include 

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
#include
#include
#include 

#include
#include
#include 

#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 для гибкого конфигурирования.

 

Мой блог находят по следующим фразам





Опубликовать в twitter.com

0