deadbyte-bot é o runtime real do DeadByte v4. Ele conecta no WhatsApp via whatsapp-web.js, registra comandos, processa mensagens, cria stickers e emite eventos operacionais.
- Funcionar sozinho em modo
standalone. - Funcionar em modo
managedcontrolado pelo spawner. - Definir no código quais comandos existem.
- Gerar manifesto serializável com
pnpm manifest. - Emitir eventos estruturados no stdout quando estiver em modo managed.
- Expor uma API interna local opcional com
h3+listhen.
pnpm installAntes do bot, rode pnpm build em ../deadbyte-runtime, porque este projeto depende de @deadbyte/runtime via file:../deadbyte-runtime.
Crie o .env real a partir do exemplo:
cp .env.example .envPrincipais variáveis:
DEADBYTE_MODE:standaloneoumanaged.DEADBYTE_INSTANCE_ID: id lógico da instância.DEADBYTE_CLIENT_ID: id usado peloLocalAuth.DEADBYTE_SESSION_PATH: pasta de sessão do WhatsApp.DEADBYTE_HEADLESS: controla o Chromium.DEADBYTE_RUNTIME_CONFIG: JSON gerado pelo spawner no modo managed.
pnpm devNo primeiro start, o evento qr do whatsapp-web.js gera o QR no terminal via qrcode-terminal. Escaneie em WhatsApp > Aparelhos conectados.
pnpm buildpnpm testpnpm manifestO manifesto contém apenas JSON: nome, versão e comandos. Ele não contém funções. O spawner usa esse output para sincronizar comandos existentes no código.
O spawner inicia o bot com flags como:
node dist/cli/index.mjs start --mode managed --instance-id nitro --client-id nitro --session-path ./.deadbyte/sessions/nitro --runtime-config ./.deadbyte/instances/nitro/runtime.config.json --internal-api true --internal-host 127.0.0.1 --internal-port 41001Nesse modo, eventos estruturados são escritos no stdout com:
__DEADBYTE_EVENT__{"id":"...","name":"whatsapp.ready",...}
Logs humanos ficam no stderr para não quebrar o parser do spawner.
system.ping: respondepong.system.status: responde instância, modo, uptime e client id.sticker.create: converte imagem/vídeo/sticker/documento suportado em sticker.sticker.steal: recria sticker usando metadata explícitapack | author,pack / authoroupack \ author.
O serviço trabalha com BufferMedia internamente. A conversão MessageMedia do whatsapp-web.js fica no adapter de borda.
- Imagens usam
sharp. - Vídeos usam
fluent-ffmpeg,ffmpeg-staticeffprobe-static. - EXIF usa
node-webpmux. - Compressão tenta tamanhos de fallback antes de falhar.
Ative com internalApi.enabled = true.
GET /healthGET /statusPOST /send-messagePOST /reload-configPOST /logoutPOST /shutdown
/reload-config ainda é um stub funcional e seguro.
Crie um arquivo em src/commands, use defineCommand do runtime e exporte em src/commands/index.ts. O comando só fica configurável no spawner depois que aparecer no manifesto.
- Importa
@deadbyte/runtimepara tipos, config, eventos e manifesto. - Em modo managed, recebe
runtime.config.jsondo spawner. - Emite eventos stdout para o spawner salvar no banco.