referência

Documentação

Build, configuração e arquitetura do cliente de chat Leviathan

nesta página
  1. Arquitetura
  2. Compilando a partir do código-fonte
  3. Configuração
  4. Contas e login
  5. Comandos de chat
  6. Negociação (OsirisBot)
  7. Plugins
  8. Notas de segurança

1.Arquitetura

O Leviathan é um cliente de chat baseado no modelo cliente-servidor. Ele se conecta a um ou mais servidores de chat que você configura — ele não abre conexões ponto a ponto com outros usuários, e não existe um modo sem servidor. O cliente mantém um socket por servidor configurado, se registra seguindo o protocolo de handshake padrão do servidor e multiplexa todas as conexões com epoll.

A interface de terminal é construída sobre ncurses/panel (com suporte a caracteres largos), então o cliente roda inteiramente dentro de um emulador de terminal — sem toolkit gráfico, sem componente de navegador.

O recurso de negociação de cripto ("OsirisBot") não faz parte do cliente em C. É um bot separado que se conecta a um servidor de chat como qualquer outro usuário e responde a comandos como !wallet ou !sell. Existem duas instâncias, uma para a sala em português (BR) e outra para a sala em inglês (USA). O bot mantém seu próprio estado no lado do servidor.

2.Compilando a partir do código-fonte

Você precisa de um toolchain C11 e algumas bibliotecas de desenvolvimento:

DependênciaUsada para
gcc, makeToolchain (compilado com -std=c11 -Wall -Wextra -Wpedantic)
libncursesw-devInterface de terminal (ncurses com caracteres largos + panel)
libssl-devTLS para os servidores de chat, HTTPS para a API de preços do CoinGecko

Os nomes dos pacotes variam por distribuição — no Debian/Ubuntu, normalmente é libncursesw5-dev e libssl-dev; no Fedora, ncurses-devel e openssl-devel.

git clone <repo-url> leviathan
cd leviathan
make            # build otimizado -> build/bin/leviathan
make debug      # build de debug: -g -O0, AddressSanitizer + UBSan
make install    # instala em $DESTDIR/usr/local/bin/leviathan

Os plugins são carregados via dlopen(), então o binário também é ligado à libdl. Uma thread em segundo plano (pthreads) atualiza os preços de cripto sem bloquear a interface.

3.Configuração

Copie os valores padrão para o seu diretório de configuração e edite-os:

mkdir -p ~/.config/leviathan
cp config/leviathan.yaml.default ~/.config/leviathan/leviathan.yaml

O arquivo de configuração é YAML e suporta uma lista de servidores, então você pode se conectar a várias redes de chat ao mesmo tempo. Cada entrada tem sua própria opção tls:

servers:
  - name: br
    host: chat.example.org
    port: 6697
    tls: true
    rooms: [br]

log:
  enabled: false
  path: ~/.local/share/leviathan/logs

O registro de mensagens vem desativado por padrão. Quando você o ativa, o cliente grava logs em texto puro de cada buffer no caminho acima — nada é enviado para mais lugar nenhum.

4.Contas e login

As contas são locais ao cliente, sem vínculo com nenhum serviço de identidade. As credenciais são armazenadas em um arquivo de texto puro users.db (usuario:hash_da_senha) dentro do seu diretório de configuração.

Limitação conhecida: as senhas hoje são hasheadas com DJB2, um hash rápido e não criptográfico, sem salt. Isso é aceitável para um cliente de terminal local de usuário único, mas não deve ser tratado como proteção contra um atacante determinado com acesso ao users.db. Não reutilize uma senha que você usa em outros lugares.

Não há e-mail, telefone ou verificação de identidade em nenhuma parte do cliente ou do bot de negociação — um login é apenas um nickname e uma senha local.

5.Comandos de chat

ComandoEfeito
/server <nome>Conecta a um servidor definido na sua configuração
/join salaEntra em uma sala no servidor atual
/msg nick textoEnvia uma mensagem privada
/leave, /quitSai de uma sala ou desconecta

São comandos padrão de chat cliente-servidor, tratados da mesma forma independentemente do servidor ao qual você está conectado.

6.Negociação (OsirisBot)

O OsirisBot roda no lado do servidor, nas salas às quais você se conecta. Não é algo que você instala localmente. Os saldos são simulados para fins do mercado — o bot controla quem possui o quê no seu próprio livro-caixa e liquida negociações entre os saldos dos usuários dentro do bot.

ComandoEfeito
!walletMostra seus saldos
!pricesMostra as cotações atuais de BTC/ETH/XMR/USDT
!sell <moeda> <quantidade> <preço>Anuncia uma quantidade para venda (taxa de anúncio se aplica, veja abaixo)
!buy <id-do-anúncio>Compra um anúncio aberto (taxa de transferência se aplica)
!listingsMostra o livro de ofertas abertas
!historyMostra suas negociações passadas

As cotações vêm da API pública do CoinGecko, consultada a cada poucos minutos. Essa requisição é feita pela máquina que roda o bot, não pelo seu cliente — então usar o bot não expõe seu IP ao CoinGecko.

7.Plugins

Os plugins são objetos compartilhados nativos (.so), carregados com dlopen() a partir de ~/.config/leviathan/plugins/ na inicialização. Um plugin expõe dois pontos de entrada, leviathan_plugin_init e leviathan_plugin_shutdown, e recebe de volta uma pequena tabela de ponteiros de função para ler buffers, imprimir e ler/escrever valores de configuração.

Os plugins rodam com privilégios totais do processo. Como são código nativo carregado no mesmo processo, um plugin não é isolado de forma alguma — ele pode ler qualquer buffer, qualquer arquivo que sua conta de usuário possa acessar, e fazer qualquer chamada de sistema, exatamente como o binário principal. Só instale plugins nos quais você confia tanto quanto confia no próprio cliente.

8.Notas de segurança