ircu2/BADWORDS_FILTERING.md

8.2 KiB

Ghid: Configurare Badwords / Word Filtering în UnderChat IRCd

📋 IMPORTANT: UnderChat IRCd NU are badwords built-in!

UnderChat IRCd (bazat pe Nefarious/ircu) NU include un sistem nativ de filtrare cuvinte (badwords).


SOLUȚII DISPONIBILE

Opțiunea 1: Servicii IRC (RECOMANDAT)

Instalează servicii IRC precum Anope sau Atheme care au module dedicate de badwords.

A. Anope IRC Services

Link: https://www.anope.org/

Caracteristici:

  • Modul os_badwords - Filtrare cuvinte globală
  • Modul cs_badwords - Filtrare pe canal
  • Suport regex și wildcard patterns
  • Acțiuni: kick, ban, quiet
  • Exceptii pentru operatori

Exemplu configurare:

# Încarcă modulul
module
{
    name = "os_badwords"
}

# Configurare badwords
service
{
    nick = "OperServ"
    user = "services"
    host = "services.underchat.org"
}

# Lista de badwords
badword
{
    word = "*www.*"
    type = "start"     # start, end, single
    reason = "Spam link detected"
}

badword
{
    word = "*http*"
    type = "any"
    reason = "URL not allowed"
}

badword
{
    word = "badword123"
    type = "single"
    reason = "Offensive language"
}

Comenzi IRC:

/msg OperServ BADWORD ADD *www.* Spam links not allowed
/msg OperServ BADWORD ADD *http* URLs not allowed
/msg OperServ BADWORD DEL *www.*
/msg OperServ BADWORD LIST

B. Atheme IRC Services

Link: https://atheme.github.io/

Modul: operserv/akill + custom filtering

Exemplu:

loadmodule "modules/operserv/akill";

# Apoi folosești AKILL pentru pattern matching

Opțiunea 2: BotServ / Custom Bot

Creează un bot IRC (Python, Node.js) care monitorizează mesajele și kickează/banează utilizatorii care folosesc cuvinte interzise.

Exemplu Bot Python (irc library):

#!/usr/bin/env python3
import irc.bot
import re

class BadwordBot(irc.bot.SingleServerIRCBot):
    def __init__(self, channel, nickname, server, port=6667):
        irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname)
        self.channel = channel
        
        # Lista de badwords (regex patterns)
        self.badwords = [
            r'www\.',           # Blochează www.
            r'http[s]?://',     # Blochează link-uri
            r'badword',         # Cuvânt specific
        ]
    
    def on_welcome(self, c, e):
        c.join(self.channel)
        c.privmsg("OperServ", "OPER botuser password")  # Login ca oper
    
    def on_pubmsg(self, c, e):
        message = e.arguments[0]
        nick = e.source.nick
        
        # Verifică fiecare badword
        for pattern in self.badwords:
            if re.search(pattern, message, re.IGNORECASE):
                c.kick(self.channel, nick, f"Badword detected: {pattern}")
                c.mode(self.channel, f"+b *!*@{nick}")
                return

def main():
    server = "madrid.es.eu.underchat.org"
    channel = "#underchat"
    nickname = "BadwordBot"
    
    bot = BadwordBot(channel, nickname, server, 6667)
    bot.start()

if __name__ == "__main__":
    main()

Instalare:

pip3 install irc
python3 badword_bot.py

Opțiunea 3: Modificare Cod Sursă IRCd (AVANSAT)

Poți modifica codul sursă al IRCd-ului pentru a adăuga filtrare de cuvinte.

Fișiere de modificat:

  • ircd/m_privmsg.c - Handler pentru PRIVMSG
  • ircd/m_notice.c - Handler pentru NOTICE

Exemplu simplu (pseudo-cod):

// În ircd/m_privmsg.c, funcția m_privmsg()

// Adaugă înainte de trimiterea mesajului:
const char *badwords[] = {"www.", "http", "badword", NULL};
const char *msg = parv[parc - 1];

for (int i = 0; badwords[i] != NULL; i++) {
    if (strstr(msg, badwords[i]) != NULL) {
        // Blochează mesajul
        sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :Message blocked: contains forbidden word '%s'", 
                      sptr, badwords[i]);
        return 0;  // Nu trimite mesajul
    }
}

// ... cod existent pentru trimitere mesaj

⚠️ ATENȚIE: Necesită recompilare și poate introduce bug-uri!


Opțiunea 4: Channel Modes (Limitat)

IRCd-ul suportă mode-uri de canal care pot limita cine poate vorbi:

# Doar voice/halfop/op pot vorbi
/MODE #canal +m

# Apoi dai voice doar utilizatorilor de încredere
/MODE #canal +v nickname

# Blochează utilizatori non-autentificați
/MODE #canal +R

Configurare în ircd.conf:

features {
    # Restricționează canalele
    "CHMODE_r_NONICKCHANGE" = "TRUE";
    "CHMODE_m_NONICKCHANGE" = "TRUE";
}

🎯 RECOMANDARE FINALĂ

Pentru filtrare eficientă de "www." și alte pattern-uri:

Instalează Anope IRC Services:

# 1. Descarcă Anope
cd /opt
wget https://github.com/anope/anope/releases/download/2.0.14/anope-2.0.14-source.tar.gz
tar xzf anope-2.0.14-source.tar.gz
cd anope-2.0.14-source

# 2. Compilează
cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/anope ..
make
make install

# 3. Configurează
cd /opt/anope/conf
cp example.conf services.conf
nano services.conf

# Editează:
# - uplink { ... } - IP și port către IRCd
# - serverinfo { ... } - Nume services
# - Încarcă modulul os_badwords

# 4. Pornește serviciile
cd /opt/anope/bin
./services

# 5. Conectează-te la IRC și configurează
/msg OperServ IDENTIFY password
/msg OperServ BADWORD ADD *www.* Spam links blocked
/msg OperServ BADWORD ADD *http* URLs not allowed

📊 COMPARAȚIE SOLUȚII

Soluție Dificultate Eficiență Mențineță Recomandare
Anope Services Medie Bună RECOMANDAT
Custom Bot Medie-Ușoară Ok OK pentru teste
Modificare IRCd Dificilă Dificilă Nu recomandat
Channel Modes Foarte ușoară Bună Limitat

🔧 CONFIGURARE RAPIDĂ ANOPE

services.conf (simplificat):

###############
# UPLINK
###############
uplink
{
    host = "127.0.0.1"
    port = 6667
    password = "link-password"  # Trebuie să corespundă cu Connect {} din ircd.conf
}

###############
# SERVER INFO
###############
serverinfo
{
    name = "services.underchat.org"
    description = "UnderChat IRC Services"
    pid = "data/services.pid"
    motd = "conf/services.motd"
}

###############
# MODULE - BADWORDS
###############
module
{
    name = "os_badwords"
}

###############
# OPERSERV
###############
service
{
    nick = "OperServ"
    user = "services"
    host = "services.underchat.org"
    gecos = "Operator Service"
}

###############
# ADMIN
###############
oper
{
    name = "admin"
    type = "Services Root"
    password = "admin_password_aici"
}

ircd.conf - Adaugă blocul pentru Services:

# Conectare pentru Services
Connect {
    name = "services.underchat.org";
    host = "127.0.0.1";
    password = "link-password";  # Aceeași cu cea din services.conf
    port = 6667;
    class = "Server";
    autoconnect = yes;
};

# UWorld pentru Services (permisiuni speciale)
UWorld {
    name = "services.underchat.org";
};

PAȘI FINALI

  1. Instalează Anope Services
  2. Configurează uplink în services.conf
  3. Adaugă Connect {} pentru services în ircd.conf
  4. Pornește services: /opt/anope/bin/services
  5. Identifică-te ca admin: /msg OperServ IDENTIFY password
  6. Adaugă badwords: /msg OperServ BADWORD ADD *www.* Spam
  7. Testează: Scrie "www.test.com" în canal → Ar trebui să fie blocat

📚 RESURSE


🎉 REZULTAT FINAL

După configurarea Anope cu modulul os_badwords:

[15:30] <User> Check out www.spam-site.com
[15:30] * User was kicked by OperServ (Badword detected: *www.*)
[15:30] * OperServ sets mode: +b *!*@user.host

Spam-ul cu "www." este BLOCAT automat!


Autor: UnderChat IRCd Team
Data: 14 Februarie 2026
Versiune: 1.0