ircu2/PSEUDO_EXPLAINED.md

657 lines
13 KiB
Markdown

# PSEUDO - Comenzi Alias către Servicii IRC
## 📋 CE ESTE PSEUDO?
**Pseudo** este un sistem de **comenzi alias** implementate la nivel de server care permit utilizatorilor să trimită mesaje către **servicii IRC** (bots) folosind **comenzi simple** în loc de `/MSG serviciu comandă`.
Este o funcționalitate de **confort pentru utilizatori** care face interacțiunea cu serviciile mai intuitivă și mai ușoară.
---
## 🎯 SCOP
### **Problema FĂRĂ Pseudo:**
Utilizatorii trebuie să știe:
1. Numele exact al serviciului (ex: `X`, `AuthServ`, `ChanServ`)
2. Serverul unde rulează (ex: `channels.undernet.org`)
3. Sintaxa comenzii (ex: `/MSG X@channels.undernet.org LOGIN user pass`)
**Exemplu complicat:**
```irc
/MSG X@channels.undernet.org LOGIN myuser mypassword
/MSG AuthServ@services.underchat.org HELP
/MSG ChanServ@services.underchat.org REGISTER #mychannel
```
### **Soluția CU Pseudo:**
Utilizatorii scriu doar:
```irc
/LOGIN myuser mypassword
/AUTHSERV
/CHANSERV REGISTER #mychannel
```
**Mai simplu, mai intuitiv!**
---
## 🔧 CUM FUNCȚIONEAZĂ?
### **Mecanismul:**
1. **User scrie:** `/CHANSERV REGISTER #mychannel`
2. **Server transformă:** `/MSG ChanServ@services.underchat.org REGISTER #mychannel`
3. **Server trimite** mesajul către serviciul corect
4. **Serviciul răspunde** utilizatorului
Este un **alias transparent** - utilizatorul nu știe că în spate se trimite un `/MSG`.
---
## 📝 SINTAXĂ ÎN ircd.conf
### **Formatul de bază:**
```conf
Pseudo "COMANDĂ" {
name = "NumeServiciu";
nick = "serviciu@server.domain.org";
};
```
### **Parametri:**
| Parametru | Obligatoriu | Descriere |
|-----------|-------------|-----------|
| `"COMANDĂ"` | ✅ DA | Comanda pe care o scriu utilizatorii (ex: `/CHANSERV`) |
| `name` | ✅ DA | Numele serviciului (folosit în mesaje de eroare) |
| `nick` | ✅ DA | Nick@Server al serviciului destinație |
| `prepend` | ❌ NU | Text de adăugat ÎNAINTEA mesajului utilizatorului |
| `defaulttext` | ❌ NU | Text trimis dacă utilizatorul NU furnizează text |
---
## 💡 EXEMPLE PRACTICE
### **Exemplu 1: Alias simplu pentru ChanServ**
```conf
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
```
**Utilizare:**
```irc
# User scrie:
/CHANSERV REGISTER #mychannel
# Server transformă în:
/MSG ChanServ@services.underchat.org REGISTER #mychannel
```
---
### **Exemplu 2: Alias cu PREPEND (adaugă text înainte)**
```conf
Pseudo "LOGIN" {
name = "X";
prepend = "LOGIN ";
nick = "X@channels.undernet.org";
};
```
**Utilizare:**
```irc
# User scrie:
/LOGIN myuser mypassword
# Server transformă în:
/MSG X@channels.undernet.org LOGIN myuser mypassword
# ^^^^^^ ADĂUGAT AUTOMAT!
```
**Avantaj:** Utilizatorul nu mai trebuie să scrie `LOGIN` de două ori!
---
### **Exemplu 3: Alias cu DEFAULT TEXT**
```conf
Pseudo "AUTHSERV" {
name = "AuthServ";
nick = "AuthServ@services.underchat.org";
defaulttext = "HELP";
};
```
**Utilizare:**
```irc
# User scrie doar comanda, fără parametri:
/AUTHSERV
# Server transformă în:
/MSG AuthServ@services.underchat.org HELP
# ^^^^ ADĂUGAT AUTOMAT!
# User poate și să furnizeze text:
/AUTHSERV STATUS
# Server transformă în:
/MSG AuthServ@services.underchat.org STATUS
```
**Avantaj:** Dacă utilizatorul uită să adauge parametri, se trimite automat `HELP`!
---
### **Exemplu 4: Serviciu cu MULTIPLE SERVER-e (failover)**
```conf
Pseudo "X" {
name = "X";
nick = "X@channels.underchat.org";
nick = "X@backup.underchat.org";
nick = "X@services.underchat.org";
};
```
**Funcționare:**
- Serverul încearcă să găsească serviciul pe `channels.underchat.org`
- Dacă NU există, încearcă `backup.underchat.org`
- Dacă NU există, încearcă `services.underchat.org`
- **Ultimul listat are prioritate cea mai mare!**
---
## 🎓 CAZURI DE UTILIZARE COMUNE
### **1. Servicii Anope/Atheme**
```conf
# NickServ
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
# ChanServ
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# MemoServ
Pseudo "MEMOSERV" {
name = "MemoServ";
nick = "MemoServ@services.underchat.org";
};
# OperServ
Pseudo "OPERSERV" {
name = "OperServ";
nick = "OperServ@services.underchat.org";
};
```
**Utilizare:**
```irc
/NICKSERV REGISTER password email@domain.com
/CHANSERV REGISTER #mychannel
/MEMOSERV SEND nick Your message here
/OPERSERV AKILL ADD *@badhost.com Bad user
```
---
### **2. Bot de Autentificare (X/W/Q)**
```conf
# Login rapid la X
Pseudo "LOGIN" {
name = "X";
prepend = "LOGIN ";
nick = "X@channels.underchat.org";
};
# Logout
Pseudo "LOGOUT" {
name = "X";
prepend = "LOGOUT";
nick = "X@channels.underchat.org";
defaulttext = ""; # Nu trimite nimic extra
};
# WhoisX
Pseudo "WHOIS" {
name = "X";
prepend = "WHOIS ";
nick = "X@channels.underchat.org";
};
```
**Utilizare:**
```irc
/LOGIN myuser mypassword
/LOGOUT
/WHOIS someuser
```
---
### **3. Bot Custom (ex: GameBot, StatBot)**
```conf
# GameBot - comenzi jocuri
Pseudo "GAME" {
name = "GameBot";
nick = "GameBot@games.underchat.org";
defaulttext = "HELP";
};
# StatBot - statistici rețea
Pseudo "STATS" {
name = "StatBot";
nick = "StatBot@stats.underchat.org";
defaulttext = "NETWORK";
};
```
**Utilizare:**
```irc
/GAME # Trimite "HELP" automat
/GAME START poker # Trimite "START poker"
/STATS # Trimite "NETWORK" automat
/STATS USER nickname # Trimite "USER nickname"
```
---
## ⚙️ CONFIGURARE ÎN ircd.conf
### **Exemplu Complet pentru UnderChat:**
```conf
# ============================================================================
# SECȚIUNE: PSEUDO - Alias-uri Comenzi pentru Servicii
# ============================================================================
# NickServ - Înregistrare și management nickname-uri
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
# Alias NS pentru NickServ (scurtătură)
Pseudo "NS" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
# ChanServ - Management canale
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# Alias CS pentru ChanServ
Pseudo "CS" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# MemoServ - Mesaje offline
Pseudo "MEMOSERV" {
name = "MemoServ";
nick = "MemoServ@services.underchat.org";
};
# Alias MS pentru MemoServ
Pseudo "MS" {
name = "MemoServ";
nick = "MemoServ@services.underchat.org";
};
# OperServ - Comenzi operatori
Pseudo "OPERSERV" {
name = "OperServ";
nick = "OperServ@services.underchat.org";
};
# Alias OS pentru OperServ
Pseudo "OS" {
name = "OperServ";
nick = "OperServ@services.underchat.org";
};
# AuthServ - Autentificare
Pseudo "AUTHSERV" {
name = "AuthServ";
nick = "AuthServ@services.underchat.org";
defaulttext = "HELP";
};
# LOGIN - Scurtătură pentru autentificare rapidă
Pseudo "LOGIN" {
name = "AuthServ";
prepend = "LOGIN ";
nick = "AuthServ@services.underchat.org";
};
# IDENTIFY - Alternativă pentru autentificare
Pseudo "IDENTIFY" {
name = "NickServ";
prepend = "IDENTIFY ";
nick = "NickServ@services.underchat.org";
};
```
---
## 🔍 VERIFICARE ȘI TESTARE
### **1. Verifică configurația:**
```bash
grep -A 3 'Pseudo "' /home/ircd/ircd/lib/ircd.conf
```
**Output așteptat:**
```conf
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
--
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
```
### **2. Testează în IRC:**
```irc
# Conectează-te la server
/SERVER madrid.es.eu.underchat.org 6667
# Testează comanda Pseudo
/CHANSERV HELP
# Ar trebui să primești răspuns de la ChanServ
# (dacă serviciile sunt active)
```
### **3. Debug (dacă nu funcționează):**
```irc
# Verifică dacă serviciul este conectat
/WHOIS ChanServ
# Dacă vezi ceva ca:
# ChanServ is ChanServ@services.underchat.org * Channel Service
# → Serviciul este activ
# Dacă vezi:
# No such nick/channel
# → Serviciul NU este conectat (problema e la Anope/Atheme)
```
---
## 📊 AVANTAJE vs DEZAVANTAJE
### ✅ **AVANTAJE:**
1. **Ușurință utilizare** - Comenzi intuitive pentru utilizatori
2. **Consistență** - Toate serviciile au aceeași sintaxă
3. **Failover** - Poate încerca multiple servere
4. **Scurtături** - `/LOGIN` în loc de `/MSG X@server LOGIN`
5. **Defaulturi inteligente** - Poate trimite `HELP` automat
6. **Backward compatible** - `/MSG` tradițional tot funcționează
### ⚠️ **DEZAVANTAJE:**
1. **Configurare necesară** - Trebuie configurat manual în ircd.conf
2. **Dependență de servicii** - Dacă serviciile cad, Pseudo nu ajută
3. **Conflict posibil** - Dacă un user are nick-ul `CHANSERV`, poate crea confuzie
4. **Nu verifică sintaxă** - Doar relay-uiește mesajul, nu validează
---
## 🚨 CAZURI SPECIALE
### **Caz 1: Serviciul nu răspunde**
```conf
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
```
**Dacă serviciul NU este conectat:**
```irc
/CHANSERV HELP
# Output:
:server NOTICE nick :Service ChanServ is currently down. Please try again later.
```
### **Caz 2: Multiple nick-uri (failover)**
```conf
Pseudo "X" {
name = "X";
nick = "X@channels.underchat.org";
nick = "X@backup.underchat.org";
};
```
**Funcționare:**
1. Serverul caută `X@channels.underchat.org` → NU există
2. Serverul caută `X@backup.underchat.org` → EXISTĂ!
3. Mesajul este trimis către `X@backup.underchat.org`
### **Caz 3: Text vid cu defaulttext**
```conf
Pseudo "HELP" {
name = "HelpBot";
nick = "HelpBot@services.underchat.org";
defaulttext = "MAINMENU";
};
```
**Utilizare:**
```irc
/HELP
# Trimite automat: /MSG HelpBot@services... MAINMENU
/HELP commands
# Trimite: /MSG HelpBot@services... commands
```
---
## 🎯 BEST PRACTICES
### **1. Folosește nume intuitive:**
```conf
# BINE:
Pseudo "NICKSERV" { ... };
Pseudo "LOGIN" { ... };
# EVITĂ:
Pseudo "ABC123" { ... };
Pseudo "ZZXASD" { ... };
```
### **2. Oferă scurtături:**
```conf
# Comanda completă
Pseudo "NICKSERV" { name = "NickServ"; nick = "NickServ@..."; };
# Scurtătură
Pseudo "NS" { name = "NickServ"; nick = "NickServ@..."; };
```
### **3. Folosește defaulttext pentru comenzi frecvente:**
```conf
# HELP automat dacă user uită parametri
Pseudo "AUTHSERV" {
name = "AuthServ";
nick = "AuthServ@services.underchat.org";
defaulttext = "HELP";
};
```
### **4. Documentează în MOTD:**
```
# În ircd.motd:
-
- Comenzi disponibile:
- /NICKSERV REGISTER password email
- /CHANSERV REGISTER #channel
- /LOGIN username password
- /AUTHSERV (pentru help)
-
- Sau scurtăturile: /NS, /CS, /MS, /OS
-
```
---
## 🔧 TROUBLESHOOTING
### **Problemă: Comanda Pseudo nu funcționează**
**Cauze posibile:**
1. **Pseudo NU este configurat în ircd.conf**
```bash
grep 'Pseudo "CHANSERV"' /home/ircd/ircd/lib/ircd.conf
# Dacă nu găsește nimic → Trebuie adăugat
```
2. **Serviciul NU este conectat**
```irc
/WHOIS ChanServ
# Dacă "No such nick" → Pornește Anope/Atheme
```
3. **Nick@Server greșit**
```conf
# Verifică că nick-ul este corect:
nick = "ChanServ@services.underchat.org";
# ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
# Nick Server (trebuie să existe în rețea)
```
4. **Server de servicii NU este linked**
```irc
/LINKS
# Caută "services.underchat.org" în listă
```
### **Soluție generală:**
```bash
# 1. Adaugă Pseudo în ircd.conf
nano /home/ircd/ircd/lib/ircd.conf
# Adaugă:
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# 2. Repornește IRCd
killall ircd
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
# 3. Asigură-te că serviciile (Anope) rulează
ps aux | grep anope
# Dacă nu:
/opt/anope/bin/services
# 4. Testează
/CHANSERV HELP
```
---
## 📚 REFERINȚE
- **Cod sursă:** `ircd/m_pseudo.c`
- **Exemplu config:** `doc/example.conf` (liniile 999-1021)
- **Testare:** `ircd/test/ircd-t1.conf` (liniile 99-102)
---
## 🎯 CONCLUZIE
**Pseudo** = **Alias-uri pentru servicii IRC**
Transformă comenzi complicate:
```irc
/MSG ChanServ@services.underchat.org REGISTER #mychannel
```
În comenzi simple:
```irc
/CHANSERV REGISTER #mychannel
```
Este o funcționalitate de **confort** care face IRC-ul mai **user-friendly** și mai **intuitiv** pentru utilizatori!
---
**Data:** 14 Februarie 2026
**Versiune:** 1.0
**Pentru:** UnderChat IRCd v1.4.0+
---
## 🚀 QUICK START
**Pentru a adăuga Pseudo în rețeaua ta:**
```conf
# Adaugă în /home/ircd/ircd/lib/ircd.conf:
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
Pseudo "LOGIN" {
name = "AuthServ";
prepend = "LOGIN ";
nick = "AuthServ@services.underchat.org";
};
```
**Restart IRCd și testează:**
```irc
/NICKSERV HELP
/CHANSERV HELP
/LOGIN username password
```
**GATA!**