Skip to content

About

Bot de WhatsApp feito em typescript

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

77 Commits

Folders and files

Repository files navigation

NeoRobotTS 🤖

Node TypeScript Baileys License Platform

Bot de WhatsApp escrito em TypeScript utilizando Baileys, com arquitetura modular e persistência local em SQLite.

O projeto é desenvolvido principalmente no Termux (Android), mas pode ser executado em qualquer ambiente compatível com Node.js.

✨ Recursos

  • Arquitetura baseada em eventos
  • Sistema modular de comandos
  • Persistência de autenticação utilizando SQLite
  • Conversão e manipulação de mídia (!s, !toimg, !tovideo, !tovideo2 via Pillow — fallback para WebP corrompido)
  • Comandos de administração de grupos (!ban, !promover, !rebaixar, !abrir, !fechar)
  • Logger centralizado com pino e métricas de conversão
  • Compatível com Termux (Android ARM64)
  • Escrito em TypeScript utilizando ES Modules

🛠️ Stack

  • Node.js 24+
  • TypeScript 6.x
  • Baileys 7.x RC (7.0.0-rc14)
  • better-sqlite3 + SQLite
  • ffmpeg + webpmux + Pillow via python3 (conversão de mídia; Pillow isolado em !tovideo2)
  • pino (logs estruturados)
  • Biome 2.5 (lint + format)

⚙️ Configuração

Variáveis de ambiente:

Variável Descrição Exemplo
WHATSAPP_PHONE_NUMBER Número para pareamento via código 5511999999999
LOG_LEVEL Nível do logger pino info (padrão)
FORCE_RESET Se true, limpa data/auth ao iniciar false

Exemplo:

export WHATSAPP_PHONE_NUMBER="5511999999999"
npm start

💬 Comandos

Geral

Comando Descrição
!ping Responde Pong
!menu [admin | ai | dono] Mostra o menu geral ou de uma seção
!boton / !botoff Ativa/desativa o bot no grupo (persiste em SQLite)

Mídia

Comando Descrição Uso
!s / !sticker Imagem/vídeo → sticker Responda ou marque mídia
!toimg Sticker → imagem PNG Responda um sticker
!tovideo Sticker animado → vídeo MP4 Responda um sticker animado
!tovideo2 Sticker animado → vídeo MP4 (Pillow fallback) Responda um sticker animado (quando !tovideo falha)

Vídeos para sticker devem ter no máximo 10s.

Administração (apenas grupos, requer bot admin)

Comando Aliases Descrição Uso
!ban !banir, !kick Remove do grupo !ban @usuario ou responda
!promote !promover, !up Promove a admin !promote @usuario
!demote !rebaixar, !down Rebaixa admin !demote @usuario
!abrir !open Abre o grupo (todos falam) !abrir
!fechar !close Fecha o grupo (só admin fala) !fechar

Todos os comandos de admin verificam LID/s.whatsapp.net e exigem que o bot também seja admin.

📦 Instalação

Instale as dependências:

npm install

Compile o projeto:

npm run build

▶️ Executando

npm start

Pareamento: na primeira execução, se WHATSAPP_PHONE_NUMBER estiver definido, o código de 8 dígitos será exibido no terminal (Vá em Aparelhos Conectados > Conectar com número).

📁 Estrutura do projeto

.
├── biome.json   # Config Biome (formatter/linter)
├── tsconfig.json
└── src/
    ├── auth/        # Persistência SQLite (Baileys creds)
    ├── commands/    # Controller + DB de grupos ativos
    ├── events/      # Dispatcher e logger
    ├── messages/    # Parser, tipos e reações
    ├── utils/       # jid, logger, admin, sticker, metadataWebp
    └── index.ts     # Entrypoint + pareamento

📊 Logs

Logger centralizado em src/utils/logger.ts com pino (saída em stdout JSON):

  • module: command → command_event (comando, jid, sender, runtime)
  • module: db → db_event (READ_GROUP, SET_GROUP_ACTIVE)
  • module: webp → webp_conversion_event (start, inspection, frames_extracted, concat_written, encode_start/done, success/failure com tamanhos e duração)
  • module: sticker → sticker_event (image/video_start/success)
  • module: command + admin_event → ban/promote/demote/open/close

Para salvar em arquivo durante debug, redirecione a saída (arquivo é ignorado no git):

npm start 2>&1 | tee bot.log
# depois filtre:
grep 'module.*webp' bot.log
grep 'admin_event' bot.log

Note

bot.log e *.log estão no .gitignore — é só artefato local de debug.

📜 Scripts

Script Descrição
npm run build Compila o projeto
npm start Executa o bot
npm run dev Executa em modo watch
npm run typecheck Verifica os tipos sem gerar arquivos
npm run clean Remove o diretório dist
npm test Placeholder para futuros testes
npx biome check ./src Checa formatação + lint (Biome)
npx biome check --write ./src Formata e organiza imports

🔧 Desenvolvimento

Ambiente utilizado

O projeto é desenvolvido e testado utilizando:

  • Termux
  • Node.js 24.x
  • TypeScript 6.x
  • Baileys 7.x RC (7.0.0-rc14, 0 vulnerabilities)
  • Biome 2.5

Dependências nativas

Este projeto utiliza better-sqlite3, que possui código nativo compilado durante a instalação.

Termux

Important

Antes de executar npm install no Termux, defina a seguinte variável de ambiente:

export GYP_DEFINES="android_ndk_path=''"

Essa configuração evita que o node-gyp tente localizar um Android NDK e faz com que a compilação utilize o toolchain fornecido pelo próprio Termux.

Instalação completa:

export GYP_DEFINES="android_ndk_path=''"
npm install
npm run build

Tip

Caso a instalação falhe, remova as dependências e tente novamente.

rm -rf node_modules package-lock.json

export GYP_DEFINES="android_ndk_path=''"

npm install

Caution

Atualizações do Node.js podem exigir a recompilação das dependências nativas.

📄 Licença

ISC

About

Bot de WhatsApp feito em typescript

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages