Documentación IRC · Avanzado
Leer y analizar el formato de un mensaje IRC
Un mensaje IRC termina en CRLF. Puede incluir etiquetas, origen, comando y parámetros. En TCP, un fragmento de datos recibido no equivale necesariamente a una línea completa: antes de interpretar los mensajes hay que separarlos.
El equipo de Dialova · Verificado el
Descomponer una línea #
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde| Parte | Valor del ejemplo | Función |
|---|---|---|
| Etiquetas | @time=… | Metadatos, antes del primer espacio separador. |
| Origen / prefijo | :Alice!alice@cloak.example | Autor indicado por el servidor. |
| Comando | PRIVMSG | Acción del protocolo. |
| Parámetro de destino | #atelier | Destino. |
| Último parámetro | :Bonjour tout le monde | Parámetro que contiene espacios; los dos puntos no forman parte del texto. |
Espacios y último parámetro #
El separador básico es el espacio ASCII. El último parámetro puede empezar por dos puntos; todo lo que sigue pertenece a ese parámetro, incluidos los espacios. Dividir toda la línea por los espacios haría perder esta información.
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123El primer ejemplo tiene un último parámetro vacío; el segundo contiene texto con espacios. Las marcas de dirección C/S usadas en otros ejemplos de la guía nunca forman parte de los bytes enviados.
Longitud, bytes y codificación #
El límite histórico de un mensaje IRC es de 512 bytes, incluido CRLF. No son 512 caracteres: un carácter UTF-8 puede ocupar varios bytes. Las etiquetas IRCv3 tienen límites adicionales propios, que no permiten hacer arbitrariamente infinito el resto del mensaje.
El IRC histórico no garantiza una codificación única para todos los textos. Los clientes y redes modernos suelen usar UTF-8 y los valores de las etiquetas IRCv3 deben estar en UTF-8. Comprueba la política de la red y el tratamiento de entradas no válidas; no inventes una negociación automática de codificación.
Un analizador robusto #
- Acumular bytes hasta una terminación completa y conservar el fragmento restante.
- Gestionar varias líneas en una lectura de red y una línea dividida entre varias lecturas.
- Limitar la memoria en lugar de esperar indefinidamente un fin de línea.
- Extraer y decodificar la zona de etiquetas y después el origen, el comando y los parámetros.
- No ejecutar un evento histórico como un cambio del estado actual.
Fuentes y verificación
Los ejemplos usan apodos y dominios ficticios, salvo los puntos de conexión expresamente documentados. Las extensiones y los ajustes específicos de una red se indican en el texto.
- Modern IRC — spécification du protocole client ↗Fuente de la especificación · consultada el 2026-10-29
- RFC 2812 — Client Protocol (2000) ↗Fuente histórica · consultada el 2026-10-29
- IRCv3 — Message Tags ↗Fuente de la especificación · consultada el 2026-10-29