Saltar para o conteúdo
Dialova

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 #

Exemplo de mensagem; CRLF final não mostrado
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde
ParteValor deste exemploFunção
Etiquetas@time=…Metadados, antes do primeiro espaço separador.
Origem / prefixo:Alice!alice@cloak.exampleAutor indicado pelo servidor.
ComandoPRIVMSGAção do protocolo.
Parâmetro de destino#atelierDestino.
Último parâmetro:Bonjour tout le mondeParâ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.

Três mensagens distintas, cada uma terminada em CRLF
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123

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