Saltar al contenido
Dialova

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 #

Ejemplo de trama; no se muestra el CRLF final
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde
ParteValor del ejemploFunción
Etiquetas@time=…Metadatos, antes del primer espacio separador.
Origen / prefijo:Alice!alice@cloak.exampleAutor indicado por el servidor.
ComandoPRIVMSGAcción del protocolo.
Parámetro de destino#atelierDestino.
Último parámetro:Bonjour tout le mondePará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.

Tres mensajes distintos, cada uno terminado en CRLF
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123

El 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.