Zum Inhalt springen
Dialova

IRC-Dokumentation · Experten

Das Format einer IRC-Nachricht lesen und analysieren

Eine IRC-Nachricht endet mit CRLF. Sie kann Tags, Quelle, Befehl und Parameter enthalten. Über TCP empfangene Daten sind nicht notwendigerweise eine vollständige Zeile. Nachrichten müssen deshalb zuerst abgegrenzt und danach interpretiert werden.

Dialova-Team · Überprüft am

Eine Zeile zerlegen #

Beispielnachricht; abschließendes CRLF nicht dargestellt
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde
BereichWert im BeispielAufgabe
Tags@time=…Metadaten vor dem ersten trennenden Leerzeichen.
Quelle / Präfix:Alice!alice@cloak.exampleVom Server angegebener Absender.
BefehlPRIVMSGProtokollaktion.
Zielparameter#atelierZiel.
Letzter Parameter:Bonjour tout le mondeEin Parameter mit Leerzeichen. Der Doppelpunkt gehört nicht zum Inhalt.

Leerzeichen und letzter Parameter #

Das grundlegende Trennzeichen ist das ASCII-Leerzeichen. Ein Doppelpunkt kann den letzten Parameter einleiten. Danach gehört alles zu diesem Parameter, einschließlich der Leerzeichen. Die gesamte Zeile einfach an Leerzeichen zu trennen würde diese Information verlieren.

Drei getrennte Nachrichten, jeweils mit CRLF abgeschlossen
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123

Im ersten Beispiel ist der letzte Parameter leer. Im zweiten enthält er Text mit Leerzeichen. Die C-/S-Kennzeichnungen der übrigen Beispiele gehören nie zu den tatsächlich übertragenen Bytes.

Länge, Bytes und Kodierung #

Die historische Längengrenze einer IRC-Nachricht beträgt 512 Bytes einschließlich CRLF. Das sind nicht 512 Zeichen: Ein UTF-8-Zeichen kann mehrere Bytes benötigen. Für IRCv3-Tags gelten zusätzliche eigene Grenzen, die den übrigen Nachrichtenteil nicht beliebig lang machen.

Historisches IRC garantiert keine einheitliche Textkodierung. Moderne Clients und Netzwerke verwenden häufig UTF-8; IRCv3-Tag-Werte müssen in UTF-8 vorliegen. Prüfe die Netzwerkrichtlinien und den Umgang mit ungültigen Eingaben. Setze keine automatische Aushandlung der Kodierung voraus.

Ein robuster Parser #

  • Bytes bis zu einem vollständigen Zeilenabschluss sammeln und den Rest aufbewahren.
  • Mehrere Zeilen pro Netzwerk-Lesevorgang und über mehrere Lesevorgänge verteilte Zeilen verarbeiten.
  • Den Speicherbedarf begrenzen, bevor unbegrenzt auf ein Zeilenende gewartet wird.
  • Zuerst Tags abtrennen und dekodieren, danach Quelle, Befehl und Parameter verarbeiten.
  • Historische Ereignisse nicht als Änderung des aktuellen Zustands ausführen.

Quellen und Überprüfung

Die Beispiele verwenden erfundene Nicknames und Domains. Ausgenommen sind ausdrücklich dokumentierte Verbindungsadressen. Netzwerkspezifische Erweiterungen und Einstellungen werden im Text gekennzeichnet.