# 🎬 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