Documentação IRC · Avançado
Ler e analisar o formato de uma mensagem IRC
Uma mensagem IRC termina em CRLF. Pode incluir etiquetas, origem, comando e parâmetros. Em TCP, um fragmento de dados recebido não é necessariamente uma linha completa: é preciso separar as mensagens antes de as interpretar.
A equipa do Dialova · Verificado em
Decompor uma linha #
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde| Parte | Valor deste exemplo | Função |
|---|---|---|
| Etiquetas | @time=… | Metadados, antes do primeiro espaço separador. |
| Origem / prefixo | :Alice!alice@cloak.example | Autor indicado pelo servidor. |
| Comando | PRIVMSG | Ação do protocolo. |
| Parâmetro de destino | #atelier | Destino. |
| Último parâmetro | :Bonjour tout le monde | Parâmetro que contém espaços; os dois pontos não fazem parte do texto. |
Espaços e último parâmetro #
O separador de base é o espaço ASCII. O último parâmetro pode ser precedido de dois pontos; tudo o que se segue pertence a esse parâmetro, incluindo os espaços. Dividir toda a linha pelos espaços faria perder esta informação.
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123O primeiro exemplo tem um último parâmetro vazio; o segundo contém texto com espaços. As marcas de direção C/S usadas noutros exemplos do guia nunca fazem parte dos bytes enviados.
Comprimento, bytes e codificação #
O limite histórico de uma mensagem IRC é de 512 bytes, incluindo CRLF. Não são 512 caracteres: um carácter UTF-8 pode ocupar vários bytes. As etiquetas IRCv3 têm limites adicionais próprios, que não permitem tornar arbitrariamente infinito o resto da mensagem.
O IRC histórico não garante uma codificação única para todos os textos. Os clientes e redes modernos usam frequentemente UTF-8 e os valores das etiquetas IRCv3 têm de estar em UTF-8. Verifica a política da rede e o tratamento de entradas inválidas; não inventes uma negociação automática da codificação.
Um analisador robusto #
- Acumular bytes até uma terminação completa e guardar o fragmento restante.
- Tratar várias linhas numa leitura de rede e uma linha dividida por várias leituras.
- Limitar a memória em vez de esperar indefinidamente por um fim de linha.
- Extrair e descodificar a zona de etiquetas e depois a origem, o comando e os parâmetros.
- Não executar um evento histórico como uma alteração do estado atual.
Fontes e verificação
Os exemplos usam alcunhas e domínios fictícios, salvo os pontos de ligação expressamente documentados. As extensões e definições específicas de uma rede são assinaladas no texto.
- Modern IRC — spécification du protocole client ↗Fonte da especificação · consultada em 2026-10-29
- RFC 2812 — Client Protocol (2000) ↗Fonte histórica · consultada em 2026-10-29
- IRCv3 — Message Tags ↗Fonte da especificação · consultada em 2026-10-29