# 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!** ✅

