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 #
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde| Partie | Valeur de cet exemple | Rôle |
|---|---|---|
| Tags | @time=… | Métadonnées, avant la première espace séparatrice. |
| Source / préfixe | :Alice!alice@cloak.example | Auteur indiqué par le serveur. |
| Commande | PRIVMSG | Action protocolaire. |
| Paramètre de cible | #atelier | Destination. |
| Dernier paramètre | :Bonjour tout le monde | Un 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.
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123Le 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.
- Modern IRC — spécification du protocole client ↗Source de spécification · consultée le 2026-10-29
- RFC 2812 — Client Protocol (2000) ↗Source historique · consultée le 2026-10-29
- IRCv3 — Message Tags ↗Source de spécification · consultée le 2026-10-29