Documentazione IRC · Avanzato
Leggere e analizzare il formato di un messaggio IRC
Un messaggio IRC termina con CRLF. Può contenere tag, sorgente, comando e parametri. Su TCP un frammento di dati ricevuto non è necessariamente una riga completa: la separazione dei messaggi precede la loro interpretazione.
Il team di Dialova · Verificato il
Scomporre una riga #
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde| Parte | Valore in questo esempio | Ruolo |
|---|---|---|
| Tag | @time=… | Metadati, prima del primo spazio separatore. |
| Sorgente / prefisso | :Alice!alice@cloak.example | Autore indicato dal server. |
| Comando | PRIVMSG | Azione del protocollo. |
| Parametro di destinazione | #atelier | Destinazione. |
| Ultimo parametro | :Bonjour tout le monde | Un parametro contenente spazi; i due punti non fanno parte del testo. |
Spazi e ultimo parametro #
Il separatore di base è lo spazio ASCII. L’ultimo parametro può essere preceduto da due punti; tutto ciò che segue appartiene a quel parametro, spazi compresi. Dividere l’intera riga in corrispondenza degli spazi farebbe perdere questa informazione.
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123Il primo esempio ha un ultimo parametro vuoto; il secondo contiene testo con spazi. Le indicazioni di direzione C/S usate negli altri esempi della guida non fanno mai parte dei byte inviati.
Lunghezza, byte e codifica #
Il limite storico di un messaggio IRC è di 512 byte, terminazione CRLF compresa. Non sono 512 caratteri: un carattere UTF-8 può occupare più byte. I tag IRCv3 hanno limiti aggiuntivi propri, che non rendono arbitrariamente infinito il resto del messaggio.
L’IRC storico non garantisce una codifica unica per tutti i testi. Client e reti moderni usano comunemente UTF-8 e i valori dei tag IRCv3 devono essere in UTF-8. Verifica le regole della rete e la gestione degli input non validi; non inventare una negoziazione automatica della codifica.
Un parser robusto #
- Accumulare i byte fino a una terminazione completa e conservare il frammento restante.
- Gestire più righe in una lettura di rete e una riga suddivisa su più letture.
- Limitare la memoria anziché attendere indefinitamente una fine riga.
- Estrarre e decodificare la sezione dei tag, poi sorgente, comando e parametri.
- Non eseguire un evento storico come una modifica dello stato attuale.
Fonti e verifica
Gli esempi usano nickname e domini fittizi, tranne gli endpoint esplicitamente documentati. Le estensioni e le impostazioni specifiche di una rete sono indicate nel testo.
- Modern IRC — spécification du protocole client ↗Fonte della specifica · consultata il 2026-10-29
- RFC 2812 — Client Protocol (2000) ↗Fonte storica · consultata il 2026-10-29
- IRCv3 — Message Tags ↗Fonte della specifica · consultata il 2026-10-29