Skip to content

Commit e1fb2f2

Browse files
committed
Update dependencies and refactor bot to use WPPConnect. Added message normalization functions and improved README with execution instructions. Updated .gitignore to include new session files.
1 parent 81754a3 commit e1fb2f2

8 files changed

Lines changed: 3458 additions & 7993 deletions

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
node_modules/
33
package-lock.json
44

5-
# Arquivos de sessão do WhatsApp
5+
# Arquivos de sessão do WhatsApp (WPPConnect usa ./tokens por padrão)
66
tokens/
77
*.session
8+
wppconnect-session/
89

910
# Logs
1011
logs/
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# Agente de Refatoração/Migração: Venom-Bot → WPPConnect
2+
3+
## Objetivo
4+
5+
Você é um agente responsável pela **refatoração e migração completa** do projeto OrbitBot da biblioteca **venom-bot** para **WPPConnect** (@wppconnect-team/wppconnect ou wppconnect-server). A migração deve preservar toda a funcionalidade existente: fila de mensagens, pipeline de IA, comandos admin, humanizador de resposta, backup, dashboard e integrações.
6+
7+
---
8+
9+
## Contexto do Projeto
10+
11+
- **Projeto:** OrbitBot — bot de WhatsApp com IA, histórico em SQLite, backup, comandos admin e painel.
12+
- **Stack atual:** Node.js, venom-bot, SQLite, pipeline de mensagens (histórico → IA → persistência).
13+
- **Arquivos que usam o cliente WhatsApp (venom):**
14+
- `src/bot.js` — ponto central: `venom.create()`, `client.onMessage()`, `client.sendText()`
15+
- `src/humanizer.js` — recebe `client` e usa apenas `client.sendText(chatId, texto)`
16+
- Nenhum outro arquivo recebe o `client` diretamente; pipeline, comandos e fila trabalham com `message.from`, `message.body`, etc.
17+
18+
---
19+
20+
## Mapeamento de API (Venom-Bot → WPPConnect)
21+
22+
Use este mapeamento como referência. Consulte a documentação oficial do WPPConnect para a versão instalada.
23+
24+
| Venom-Bot | WPPConnect (equivalente) |
25+
|-----------|---------------------------|
26+
| `venom.create({ session, multidevice, headless, logQR, ... })` | `wppconnect.create({ session, ... })` ou `create()` com opções equivalentes (session name, headless, catchQR, etc.) |
27+
| Retorno: `client` (Promise) | Retorno: objeto cliente (Promise) — verificar nome exato do método de criação |
28+
| `client.onMessage(callback)` | `client.on('message', callback)` ou método equivalente para escutar mensagens |
29+
| `client.sendText(chatId, text)` | `client.sendText(chatId, text)` ou `client.sendText(contactId, text)` — conferir assinatura (id pode ser `@c.us` ou só número) |
30+
| Objeto `message`: `from`, `body`, `isGroupMsg` | Adaptar para o formato do WPPConnect: verificar se usa `from`, `body`, `isGroup` ou nomes diferentes |
31+
| Sessão/pasta de dados | WPPConnect pode usar pasta distinta (ex.: `tokens`, `wppconnect-session`); ajustar e documentar |
32+
33+
---
34+
35+
## Escopo da Migração
36+
37+
### 1. Dependências
38+
- **Remover:** `venom-bot` do `package.json`.
39+
- **Adicionar:** pacote WPPConnect (ex.: `@wppconnect-team/wppconnect` ou `wppconnect-server` — usar a API estável e documentada).
40+
- Atualizar `package-lock.json` via `npm install`.
41+
42+
### 2. `src/bot.js`
43+
- Substituir `require('venom-bot')` pelo require do WPPConnect.
44+
- Substituir `venom.create({ ... })` pela função de criação do WPPConnect, mantendo equivalentes para:
45+
- Nome da sessão
46+
- Modo headless (ou equivalente)
47+
- Exibição do QR (logQR / catchQR)
48+
- Argumentos do browser (--no-sandbox etc.) se suportados
49+
- Adaptar o callback de mensagens: de `client.onMessage(async (message) => { ... })` para o modelo de eventos do WPPConnect (ex.: `client.on('message', ...)`).
50+
- Garantir que o objeto `message` usado na fila e no pipeline tenha os campos esperados: `from`, `body`, `isGroupMsg` (ou normalizar para esse formato se o WPPConnect usar outros nomes).
51+
- Manter inalterados: lógica de admin (`isAdmin`, comandos `/`), `messageQueue`, `pipeline.run()`, `simularRespostaHumana(client, message.from, resposta)`, tratamento de erros e logs.
52+
53+
### 3. `src/humanizer.js`
54+
- A função `simularRespostaHumana(client, chatId, texto)` deve continuar recebendo um **cliente** e usar apenas **envio de texto**.
55+
- Trocar chamadas `client.sendText(chatId, ...)` pela API equivalente do WPPConnect (geralmente mesmo nome; verificar se `chatId` deve ser formatado diferente, ex.: com sufixo `@c.us`).
56+
57+
### 4. Formato de contato (ID)
58+
- Venom usa IDs no formato `numero@c.us`. Se o WPPConnect usar formato diferente (ex.: só número, ou `numero@s.whatsapp.net`), criar um helper (ex.: `normalizeChatId(from)`) e usá-lo em `bot.js` e `humanizer.js` para manter compatibilidade com o resto do código (pipeline, histórico, comandos).
59+
60+
### 5. Sessão e arquivos locais
61+
- Atualizar `.gitignore` se a pasta de sessão do WPPConnect for diferente (ex.: `wppconnect-session`, `tokens`).
62+
- Documentar no README ou em comentário onde os dados de sessão são armazenados.
63+
64+
### 6. Outros arquivos
65+
- **Não alterar** a lógica de: `pipeline.js`, `queue.js`, `commandBus`, comandos admin, `openai`, `backup`, `dashboard`, `logger`, `performance`, repositórios e plugins, exceto se for necessário receber um “cliente” com interface diferente (neste projeto apenas `bot.js` e `humanizer.js` usam o cliente).
66+
- Se algum plugin ou módulo receber `client` no futuro, ele deve usar apenas `sendText(chatId, text)`; manter essa interface para compatibilidade.
67+
68+
---
69+
70+
## Regras de Implementação
71+
72+
1. **Não remover funcionalidades:** fila, buffer por cliente, comandos `/`, pipeline de IA, humanizador, backup, dashboard, logs e métricas devem continuar funcionando.
73+
2. **Manter estrutura de pastas e nomes de arquivos** (exceto se renomear algo por convenção do WPPConnect).
74+
3. **Tratamento de erros:** preservar `try/catch` e mensagens de fallback ao usuário (“Estou tendo dificuldades técnicas...”).
75+
4. **Compatibilidade de formato de mensagem:** o objeto que segue para `messageQueue.addMessage(message)` e para `pipeline.run(message.from, message.body)` deve ter pelo menos `from`, `body` e `isGroupMsg` (ou equivalente mapeado).
76+
5. **Testes manuais:** após a migração, o agente deve listar no próprio arquivo ou em MIGRATION_CHECKLIST.md os passos para testar: iniciar bot, escanear QR, enviar mensagem privada, comando admin, verificar resposta humanizada e histórico.
77+
78+
---
79+
80+
## Checklist de Entrega
81+
82+
- [ ] `package.json` sem `venom-bot`, com dependência WPPConnect instalada.
83+
- [ ] `src/bot.js` usando apenas API WPPConnect; mensagens chegando ao mesmo fluxo (fila → pipeline → humanizer).
84+
- [ ] `src/humanizer.js` usando apenas API WPPConnect para envio de texto.
85+
- [ ] Formato de `from`/chatId normalizado se necessário; pipeline e comandos funcionando com o mesmo contrato.
86+
- [ ] `.gitignore` atualizado para pastas de sessão do WPPConnect.
87+
- [ ] README ou comentário com instruções de execução e local da sessão.
88+
- [ ] Nenhuma referência residual a `venom` ou `venom-bot` no código (exceto em documentação de migração ou este prompt).
89+
90+
---
91+
92+
## Referências
93+
94+
- Documentação oficial do WPPConnect (GitHub/npm) para criação de cliente, eventos de mensagem e `sendText`.
95+
- Código atual em `src/bot.js` e `src/humanizer.js` como referência do contrato (from, body, sendText).
96+
97+
Ao executar este prompt, o agente deve realizar todas as alterações necessárias nos arquivos listados, garantir que o projeto inicie sem erros de require e que o fluxo de mensagens permaneça compatível com o restante do sistema.

MIGRATION_CHECKLIST.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Checklist de testes pós-migração (Venom → WPPConnect)
2+
3+
Use este checklist para validar manualmente a migração do OrbitBot para WPPConnect.
4+
5+
## Pré-requisitos
6+
7+
- Node.js 16+
8+
- Dependências instaladas (`npm install`)
9+
- Chave OpenRouter configurada em `src/openai.js`
10+
- Número de admin configurado em `src/bot.js` (`ADMIN_NUMBERS`)
11+
12+
## Passos para testar
13+
14+
### 1. Iniciar o bot
15+
16+
- [ ] Executar `npm start`
17+
- [ ] Verificar que não há erros de `require` (nenhuma referência a `venom-bot`)
18+
- [ ] Confirmar que o QR Code é exibido (terminal e/ou janela do navegador, se `headless: false`)
19+
20+
### 2. Escanear QR e conectar
21+
22+
- [ ] Escanear o QR Code com o WhatsApp (Dispositivos conectados > Conectar um dispositivo)
23+
- [ ] Verificar mensagem no console do tipo "Bot iniciado com sucesso" / "Bot pronto para receber mensagens"
24+
- [ ] Confirmar que a pasta `./tokens` foi criada com os dados da sessão
25+
26+
### 3. Mensagem privada e pipeline
27+
28+
- [ ] Enviar uma mensagem de texto **privada** (não em grupo) para o número conectado
29+
- [ ] Verificar que o bot responde (resposta gerada pela IA)
30+
- [ ] Verificar que a resposta é enviada em trechos (humanizador), com pequenos atrasos
31+
- [ ] Enviar outra mensagem e confirmar que o histórico/contexto é mantido (resposta coerente com a conversa)
32+
33+
### 4. Comando de admin
34+
35+
- [ ] Enviar um comando de admin a partir de um número listado em `ADMIN_NUMBERS` (ex.: `/backup listar` ou outro comando válido)
36+
- [ ] Verificar que o bot responde ao comando (ex.: lista de backups ou mensagem de confirmação)
37+
- [ ] Enviar um comando de um número **não** admin e confirmar que o bot não executa como admin (pode processar como mensagem normal ou ignorar conforme a lógica)
38+
39+
### 5. Grupos
40+
41+
- [ ] Enviar mensagem em um **grupo** onde o bot está
42+
- [ ] Verificar que o bot **não** responde em grupos (apenas mensagens privadas são processadas)
43+
44+
### 6. Erros e fallback
45+
46+
- [ ] (Opcional) Simular falha (ex.: desligar rede momentaneamente ou usar comando que force erro) e verificar que o usuário recebe a mensagem de fallback: "Estou tendo dificuldades técnicas. Por favor, tente novamente."
47+
48+
### 7. Persistência e sessão
49+
50+
- [ ] Parar o bot (Ctrl+C) e iniciar novamente com `npm start`
51+
- [ ] Verificar que o bot reconecta **sem** pedir QR novamente (sessão em `./tokens`)
52+
- [ ] Enviar nova mensagem e confirmar que o histórico anterior ainda é considerado na resposta
53+
54+
## Resumo
55+
56+
- **Alterados na migração:** `package.json` (venom-bot → @wppconnect-team/wppconnect), `src/bot.js`, `src/humanizer.js` (apenas documentação), `.gitignore` (já cobria `tokens/`), README e este checklist.
57+
- **Não alterados:** pipeline, fila, comandos admin, openai, backup, dashboard, repositórios, plugins — continuam usando apenas `message.from`, `message.body` e, no bot, `message.isGroupMsg`.
58+
59+
Se todos os itens forem marcados com sucesso, a migração pode ser considerada concluída.

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ npm install
3838
const OPENROUTER_API_KEY = 'sua-chave-openrouter-aqui';
3939
```
4040

41+
## Execução
42+
43+
Inicie o bot com:
44+
45+
```bash
46+
npm start
47+
```
48+
49+
Na primeira execução, um QR Code será exibido no terminal (e/ou uma janela do navegador será aberta, conforme a opção `headless` em `src/bot.js`). Escaneie o QR Code com o WhatsApp (Dispositivos conectados > Conectar um dispositivo).
50+
51+
Os dados da sessão do **WPPConnect** são armazenados na pasta `./tokens` (nome da sessão: `sessionName`). Essa pasta já está no `.gitignore` e não deve ser versionada.
52+
4153
## Funcionalidades Principais
4254

4355
### **IA e Respostas**

0 commit comments

Comments
 (0)