Skip to content
github-actions[bot] edited this page Nov 13, 2026 · 1 revision

💬 Chat ao Vivo (Painel de Chat Universal)

Cliente de chat multi-protocolo embutido no Codis. A arquitetura é dividida em núcleo sem Tk (src/chat/) e interface (src/ui/chat_panel.py):

Camada Arquivos Responsabilidade
Modelos src/chat/models.py ChatProfile, tabelas de campos por protocolo (FieldSpec), selos/cores
Adaptadores src/chat/adapters/*.py Um por protocolo; ciclo de vida, reconexão com backoff e fila de envio ficam em base.py
Sessão src/chat/session.py Estado dos canais (thread-safe), menções, comandos, eco, histórico
Histórico src/chat/history.py JSONL por canal, permissão 0600, tamanho limitado
Interface src/ui/chat_panel.py, chat_render.py, chat_profile_dialog.py Renderização incremental, composer, busca, diálogo de conexão

Acesso: Configurações → Remoto & Colaboração → Chat ao Vivo... ou o ícone 💬 da barra de atividades.

Não confundir com Colaboração em Tempo Real (edição compartilhada). O Chat é um cliente de mensageria genérico para conversar com a equipe enquanto você programa.


Protocolos

Protocolo O que está implementado Limitações conhecidas
IRC / IRCS Parser RFC 1459 + tags IRCv3, CAP (sasl, server-time, multi-prefix), SASL PLAIN, TLS, CTCP (ACTION, VERSION, PING), NAMES/prefixos, PING/keepalive, divisão de mensagens longas, servidores com fim de linha \n ou \r\n -
XMPP / Jabber Parser XML incremental, STARTTLS ou TLS direto, SASL PLAIN/ANONYMOUS, bind, MUC (roster, assunto, histórico com horário original, conflito de apelido), DMs, /me SCRAM-SHA-1 ainda não; sem SRV lookup (informe o host se o domínio não resolver)
Matrix Login por senha ou access_token (validado por whoami), long-poll /sync, nomes de exibição, salas por alias/ID, convites, imagens/arquivos como link, m.emote, tópico Sem E2EE (salas criptografadas não são legíveis)
Slack Socket Mode (App Token xapp-, recomendado), RTM (apps clássicos) ou polling automático; nomes de canais/usuários resolvidos, menções/links desescapados Apps novos não têm RTM: sem App Token o Codis usa polling (alguns segundos de atraso)
Discord Gateway v10 com heartbeat/ACK e intents corretos, filtro de canais do perfil, DMs, menções e anexos, limite de 2000 caracteres, allowed_mentions desligado (sem @everyone acidental) Exige Message Content Intent habilitado no Developer Portal; token de usuário (self-bot) viola os ToS
Telegram Long-polling, grupos/canais/DMs, texto puro (sem erros por <), mídia como rótulo Bot só vê chats onde foi adicionado
Mattermost Login (token no cabeçalho Token) ou PAT, WebSocket v4, equipes, DMs, membros -
MQTT 3.1.1 Remaining-length completo, usuário com/sem senha, keepalive com PINGREQ, TLS, curingas na assinatura, formato plain ou json Publica só em tópico exato (sem curinga)
WebSocket / Codis ws, wss e servidor colaborativo do Codis (join com senha, lista de peers, entrada/saída) Senha errada é erro definitivo (não fica tentando)

Garantias comuns

  • Reconexão automática com backoff exponencial (1 s → 60 s) e re-entrada nos canais; erros definitivos (senha/token inválido) não são repetidos.
  • Todo envio sai por fila em thread própria: a interface nunca trava em rede lenta; falhas aparecem no canal.
  • Texto enviado é saneado contra injeção de comandos (CR/LF/NUL) nos protocolos orientados a linha.

Interface

  • Barra lateral com selo/cor do protocolo, status (online / conectando / reconectando / offline) e badges de não lidas (vermelho = menção ou DM). Recolher servidor pela seta.
  • Mensagens com recuo suspenso, agrupamento por autor, separador de dia, linha "novas mensagens" após o histórico, destaque de menções, `código`, blocos ```, **negrito**, links clicáveis (só http/https), cores de nick com contraste garantido no tema claro/escuro.
  • Rolagem preservada: se você está lendo o histórico, mensagens novas não puxam a tela; aparece o botão ↓ N novas.
  • Composer multilinha (Enter envia, Shift+Enter quebra linha), ↑/↓ histórico, Tab completa nicks e comandos, confirmação ao colar mais de 5 linhas.
  • Busca no canal (Ctrl+F, Enter/Shift+Enter navegam), alternador rápido (Ctrl+K), Alt+↑/↓ troca de conversa.
  • Membros (alternável): ops primeiro; duplo clique menciona; menu com DM/Whois (IRC), ignorar, copiar.
  • Diálogo de conexão adaptativo, validação inline, botão Testar conexão (alcance/TLS e credencial quando o protocolo permite).

Comandos

/help lista tudo. Genéricos: /join, /part, /close, /query nick [msg], /me, /clear, /clearhistory, /ignore, /unignore, /reconnect, /disconnect, //texto (envia /texto). IRC: /msg /nick /topic /whois /who /names /list /mode /kick /op /deop /voice /ban /ns /cs /identify /away /invite /notice /ctcp /raw. XMPP: /topic /nick. Matrix: /topic.


Perfis e privacidade

  • ~/.config/codis/chat_profiles.json (0600). Senhas/tokens ficam em base64 (ofuscação, não é criptografia) - não reutilize senhas importantes.
  • Histórico em .../chat_history/<perfil>/<canal>.jsonl (0600, ~1 MB por canal), ligado por padrão; desative por perfil ("Salvar histórico") ou apague com /clearhistory.
  • Opções por perfil: reconectar automaticamente, conectar ao abrir, verificar certificado TLS.

Testes

tests/test_chat_*.py sobem servidores falsos em sockets reais (IRC, MQTT, XMPP, HTTP, WebSocket) e o servidor colaborativo real do Codis; tests_gui/test_chat_panel.py exercita a interface completa sob Xvfb.

Clone this wiki locally