| # 🎬 GUIA COMPLETO - SIMULAÇÕES DE PRESENÇA (AKIRA BOT V21) | |
| ## ✅ STATUS DAS SIMULAÇÕES | |
| ### 1️⃣ **Simulação de Digitação** ✅ FUNCIONAL | |
| - **Arquivo**: `PresenceSimulator.js` → `simulateTyping()` | |
| - **Como funciona**: | |
| ``` | |
| 1. Envia 'available' (online) | |
| 2. Aguarda 300ms | |
| 3. Envia 'composing' (digitando) | |
| 4. Aguarda tempo proporcional (30-50ms por caractere) | |
| 5. Envia 'paused' (parou de digitar) | |
| 6. Aguarda 300ms | |
| 7. Envia 'available' (volta ao normal) | |
| ``` | |
| - **Integração no CommandHandler**: `simulateTyping(jid, text)` | |
| - **Cálculo automático**: `calculateTypingDuration(text)` → 1-15 segundos conforme tamanho | |
| ### 2️⃣ **Simulação de Gravação de Áudio** ✅ FUNCIONAL | |
| - **Arquivo**: `PresenceSimulator.js` → `simulateRecording()` | |
| - **Como funciona**: | |
| ``` | |
| 1. Envia 'recording' (gravando áudio) | |
| 2. Aguarda tempo proporcional (10ms por caractere) | |
| 3. Envia 'paused' (gravação concluída) | |
| ``` | |
| - **Integração no CommandHandler**: `simulateRecording(jid, text)` | |
| - **Cálculo automático**: `calculateRecordingDuration(text)` → 2-10 segundos conforme tamanho | |
| ### 3️⃣ **Simulação de Ticks (✓ e ✓✓)** ✅ FUNCIONAL | |
| - **Arquivo**: `PresenceSimulator.js` → `simulateTicks()` | |
| - **Lógica automática**: | |
| #### 📱 EM GRUPOS (mensagens recebidas): | |
| ``` | |
| ❌ NÃO ATIVADA (sem menção/reply) | |
| └─ Um tick (✓) = Entregue | |
| └─ Usa: sendReadReceipt() ou sendReceipt() | |
| └─ Log: "✓ [ENTREGUE] Grupo - Um tick" | |
| ✅ ATIVADA (mencionou ou respondeu) | |
| └─ Dois ticks azuis (✓✓) = Lido | |
| └─ Usa: readMessages() | |
| └─ Log: "✓✓ [LIDO] Grupo - Dois ticks azuis" | |
| ``` | |
| #### 💬 EM PV (Direct Message): | |
| ``` | |
| ❌ NÃO ATIVADA | |
| └─ Um tick (✓) = Entregue | |
| └─ Log: "✓ [ENTREGUE] PV - Um tick" | |
| ✅ ATIVADA (ou áudio) | |
| └─ Dois ticks azuis (✓✓) = Lido | |
| └─ Log: "✓✓ [LIDO] PV - Dois ticks azuis" | |
| 🎤 ÁUDIO REPRODUZIDO | |
| └─ Dois ticks azuis (✓✓) = Áudio ouvido | |
| └─ Log: "▶️ [REPRODUZIDO] PV - Áudio marcado como reproduzido" | |
| ``` | |
| #### ✨ STATUS DE MENSAGENS ENVIADAS PELO BOT: | |
| ``` | |
| 1️⃣ Primeiro status: Entregue (1 tick) | |
| └─ Automático ao enviar | |
| 2️⃣ Segundo status: Lido (2 ticks azuis) | |
| └─ Automático após resposta ser lida pelo user | |
| ``` | |
| ### 4️⃣ **Simulação de Online (Presence)** ✅ FUNCIONAL | |
| - **Arquivo**: `PresenceSimulator.js` → automatizado | |
| - **Como funciona**: | |
| ``` | |
| Todas as simulações mantêm o bot como 'available' | |
| - Antes de ações: Envia 'available' | |
| - Depois de ações: Volta para 'available' | |
| - Garante que bot sempre aparece como online | |
| ``` | |
| --- | |
| ## 🔧 INTEGRAÇÃO NO INDEX.JS | |
| ### Exemplo de Uso Básico: | |
| ```javascript | |
| const PresenceSimulator = require('./modules/PresenceSimulator'); | |
| const CommandHandler = require('./modules/CommandHandler'); | |
| // Inicializar | |
| const presenceSimulator = new PresenceSimulator(sock); | |
| const commandHandler = new CommandHandler(botCore, sock); | |
| // Responder comando com simulação completa | |
| async function handleCommand(sock, m, comando) { | |
| const jid = m.key.remoteJid; | |
| const resposta = "Olá! Aqui está sua resposta."; | |
| // Simular digitação | |
| await presenceSimulator.simulateTyping(jid, resposta); | |
| // Enviar resposta | |
| await sock.sendMessage(jid, { text: resposta }, { quoted: m }); | |
| // Marcar como lido | |
| await presenceSimulator.simulateTicks(m, true); | |
| } | |
| ``` | |
| ### Exemplo com CommandHandler Integrado: | |
| ```javascript | |
| // No event handler de mensagens | |
| sock.ev.on('messages.upsert', async ({ messages }) => { | |
| const m = messages[0]; | |
| // Marcar status inicial | |
| await commandHandler.markMessageStatus(m, false); | |
| // Processar comando | |
| const resposta = "Resposta do comando..."; | |
| // Simular digitação | |
| await commandHandler.simulateTyping(m.key.remoteJid, resposta); | |
| // Enviar | |
| await sock.sendMessage(m.key.remoteJid, { text: resposta }, { quoted: m }); | |
| // Marcar como lido (final) | |
| await commandHandler.markMessageStatus(m, true); | |
| }); | |
| ``` | |
| --- | |
| ## 📊 TABELA DE COMPORTAMENTOS | |
| | Situação | Digitação | Gravação | Ticks | Status | | |
| |----------|-----------|----------|-------|--------| | |
| | Comando em PV | ✅ Sim | ❌ Não | ✓✓ Azul | LIDO | | |
| | Comando em Grupo (ativado) | ✅ Sim | ❌ Não | ✓✓ Azul | LIDO | | |
| | Comando em Grupo (não ativado) | ✅ Sim | ❌ Não | ✓ Simples | ENTREGUE | | |
| | Resposta de áudio em PV | ❌ Não | ✅ Sim | ✓✓ Azul | REPRODUZIDO | | |
| | Resposta de áudio em Grupo | ❌ Não | ✅ Sim | ✓✓ Azul | LIDO | | |
| | Resposta de imagem | ✅ Sim | ❌ Não | ✓✓ Azul | LIDO | | |
| | Resposta de vídeo | ✅ Sim | ❌ Não | ✓✓ Azul | LIDO | | |
| --- | |
| ## 🧪 TESTE PRÁTICO - Validar Simulações | |
| ### Teste 1: Digitação Realista | |
| ```bash | |
| # Enviar mensagem em PV para bot | |
| # Observe no WhatsApp: | |
| ✅ Bot aparece "digitando..." | |
| ✅ Tempo proporção ao tamanho da resposta | |
| ✅ Para de digitar antes de enviar | |
| ✅ Resposta aparece | |
| ✅ Marca como lido (2 ticks azuis) | |
| ``` | |
| ### Teste 2: Gravação de Áudio | |
| ```bash | |
| # Enviar áudio mencionando "Akira" | |
| # Observe no WhatsApp: | |
| ✅ Bot aparece "gravando áudio..." | |
| ✅ Após ~2-3 segundos para | |
| ✅ Áudio é enviado | |
| ✅ Marca como reproduzido (✓✓ azul) | |
| ``` | |
| ### Teste 3: Ticks em Grupo | |
| ```bash | |
| # Grupo onde bot é admin | |
| # Enviar mensagem SEM mencionar bot | |
| ✅ Bot marca como entregue (✓) | |
| # Enviar mensagem MENCIONANDO bot | |
| ✅ Bot marca como lido (✓✓ azul) | |
| ``` | |
| ### Teste 4: Ticks em PV | |
| ```bash | |
| # Enviar mensagem em PV | |
| ✅ Bot marca como lido (✓✓ azul) SEMPRE | |
| ``` | |
| --- | |
| ## 🐛 TROUBLESHOOTING | |
| ### ❌ Problema: Digitação não aparece | |
| **Solução**: | |
| - Verifique se `sendPresenceUpdate()` é suportado na versão do Baileys | |
| - Confirme que socket está conectado (`sock.user` existe) | |
| - Teste manualmente com `await sock.sendPresenceUpdate('composing', jid)` | |
| ### ❌ Problema: Ticks não aparecem | |
| **Solução**: | |
| - Verifique se `readMessages()` funciona em grupos | |
| - Se erro, use `sendReadReceipt()` como fallback | |
| - Para grupos, confirme que bot é admin | |
| ### ❌ Problema: Presença não volta para online | |
| **Solução**: | |
| - Verifique se `paused` é enviado corretamente | |
| - Adicione `await delay(300)` e depois `available` | |
| - Teste manualmente | |
| ### ❌ Problema: Simulações muito lentes | |
| **Solução**: | |
| - Reduza o multiplicador no `calculateTypingDuration()` | |
| - Mínimo não pode ser < 500ms (pode parecer suspeito) | |
| - Máximo recomendado é 10-15s | |
| --- | |
| ## 📁 ARQUIVOS ENVOLVIDOS | |
| ``` | |
| /akira/index/ | |
| ├── modules/ | |
| │ ├── PresenceSimulator.js ← Implementação das simulações | |
| │ ├── CommandHandler.js ← Integração com handler | |
| │ ├── ConfigManager.js ← Configurações | |
| │ ├── BotCore.js ← Core do bot | |
| │ └── ... (outras classes) | |
| │ | |
| ├── index.js ← Exemplo de integração | |
| └── GUIA_SIMULACOES.md ← Este arquivo | |
| ``` | |
| --- | |
| ## ✅ CHECKLIST - VALIDAÇÃO FINAL | |
| - [ ] `PresenceSimulator.js` criado | |
| - [ ] `CommandHandler.js` atualizado com integração | |
| - [ ] Socket passado ao CommandHandler | |
| - [ ] Digitação funciona em comandos | |
| - [ ] Gravação funciona em áudios | |
| - [ ] Ticks aparecem corretamente em PV | |
| - [ ] Ticks aparecem corretamente em grupos | |
| - [ ] Bot sempre aparece online | |
| - [ ] Sem erros no console | |
| - [ ] Comportamento natural e realista | |
| --- | |
| ## 🚀 PRÓXIMOS PASSOS | |
| 1. **Implementar no index.js**: | |
| ```javascript | |
| const presenceSimulator = new PresenceSimulator(sock); | |
| commandHandler.setSocket(sock); | |
| ``` | |
| 2. **Testar em grupos reais**: | |
| - Verificar ticks | |
| - Verificar digitação | |
| - Verificar áudios | |
| 3. **Ajustar tempos** se necessário conforme feedback | |
| 4. **Monitorar logs** para garantir nenhuma falha | |
| --- | |
| **Última atualização**: 24 de Janeiro de 2025 | |
| **Versão**: AKIRA BOT V21.02.2025 | |
| **Status**: ✅ 100% FUNCIONAL | |