Aller au contenu
Dialova

Documentation IRC · Avancé

Lire et analyser le format d’un message IRC

Un message IRC se termine par CRLF. Il peut comporter des tags, une source, une commande et des paramètres. Sur TCP, un morceau de données reçu n’est pas nécessairement une ligne complète : le découpage des messages précède leur interprétation.

Équipe Dialova · Vérifié le

Décomposer une ligne #

Exemple de trame ; CRLF final non affiché
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde
PartieValeur de cet exempleRôle
Tags@time=…Métadonnées, avant la première espace séparatrice.
Source / préfixe:Alice!alice@cloak.exampleAuteur indiqué par le serveur.
CommandePRIVMSGAction protocolaire.
Paramètre de cible#atelierDestination.
Dernier paramètre:Bonjour tout le mondeUn paramètre contenant des espaces ; le deux-points ne fait pas partie du texte.

Espaces et dernier paramètre #

Le séparateur de base est l’espace ASCII. Le dernier paramètre peut être précédé d’un deux-points ; tout ce qui suit appartient alors à ce paramètre, y compris les espaces. Une simple découpe de toute la ligne sur les espaces ferait perdre cette information.

Trois messages distincts, chacun terminé par CRLF
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123

Le premier exemple a un dernier paramètre vide ; le second contient un texte avec des espaces. Les balises de direction C/S utilisées dans les autres exemples du guide ne font jamais partie des octets envoyés.

Longueur, octets et encodage #

La limite historique du message IRC est de 512 octets, terminaison CRLF comprise. Ce n’est pas 512 caractères : un caractère UTF-8 peut prendre plusieurs octets. Les tags IRCv3 ont des limites supplémentaires propres, qui n’autorisent pas à rendre arbitrairement infini le reste du message.

IRC historique ne garantit pas un encodage unique pour tous les textes. Les clients et réseaux modernes utilisent couramment UTF-8, et les valeurs des tags IRCv3 doivent être en UTF-8. Vérifiez la politique du réseau et le traitement des entrées invalides ; n’inventez pas une négociation automatique d’encodage.

Un parseur robuste #

  • Accumuler les octets jusqu’à une terminaison complète et garder le fragment restant.
  • Gérer plusieurs lignes dans une lecture réseau et une ligne découpée sur plusieurs lectures.
  • Limiter la mémoire avant d’attendre indéfiniment une fin de ligne.
  • Extraire et décoder la zone de tags, puis source, commande et paramètres.
  • Ne pas exécuter un événement historique comme une mutation de l’état courant.

Sources et vérification

Les exemples utilisent des pseudos et domaines fictifs, sauf les points de connexion explicitement documentés. Les extensions et réglages propres à un réseau sont signalés dans le texte.