# 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:** ```conf # Î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:** ```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:** ```conf 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):** ```python #!/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:** ```bash 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):** ```c // Î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: ```irc # 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:** ```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:** ```bash # 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):** ```conf ############### # 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:** ```conf # 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 - **Anope Documentation:** https://wiki.anope.org/ - **Anope Modules:** https://wiki.anope.org/index.php/2.0/Modules - **P10 Protocol (pentru linking):** `doc/p10.txt` în repository --- ## 🎉 REZULTAT FINAL După configurarea Anope cu modulul `os_badwords`: ``` [15:30] 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