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ência | Usada para |
|---|---|
| gcc, make | Toolchain (compilado com -std=c11 -Wall -Wextra -Wpedantic) |
| libncursesw-dev | Interface de terminal (ncurses com caracteres largos + panel) |
| libssl-dev | TLS 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.
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
| Comando | Efeito |
|---|---|
/server <nome> | Conecta a um servidor definido na sua configuração |
/join sala | Entra em uma sala no servidor atual |
/msg nick texto | Envia uma mensagem privada |
/leave, /quit | Sai 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.
| Comando | Efeito |
|---|---|
!wallet | Mostra seus saldos |
!prices | Mostra 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) |
!listings | Mostra o livro de ofertas abertas |
!history | Mostra 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.
8.Notas de segurança
- A conexão com um servidor de chat usa TLS quando o bloco do servidor tem
tls: true. Isso protege o link entre você e aquele servidor contra bisbilhoteiros na rede. - Isso não protege suas mensagens do operador do servidor. O Leviathan não implementa criptografia de mensagem ponta a ponta — o servidor de chat ao qual você se conecta recebe e pode registrar o conteúdo das mensagens em texto puro, assim como qualquer sistema de chat cliente-servidor.
- Atualmente não há suporte a Tor ou proxy SOCKS embutido no cliente. Se você precisa esconder seu IP do servidor ao qual se conecta, roteie o cliente por um proxy ou VPN no nível do sistema por conta própria; o Leviathan não faz isso por você hoje.
- Veja Privacidade para saber o que o cliente armazena localmente e o que sai da sua máquina.