const { Client, LocalAuth } = require('whatsapp-web.js'); const qrcode = require('qrcode-terminal'); const axios = require('axios'); const FormData = require('form-data'); const client = new Client({ authStrategy: new LocalAuth(), puppeteer: { args: ['--no-sandbox', '--disable-setuid-sandbox'] } }); // Regista o momento exato em que o bot foi iniciado const botStartTime = Math.floor(Date.now() / 1000); client.on('qr', (qr) => { qrcode.generate(qr, { small: true }); console.log('👆 Faça a leitura do QR Code com o telemóvel/celular da gráfica.'); }); client.on('ready', () => { console.log('✅ O Robô está conectado e pronto para receber ficheiros!'); }); const delay = ms => new Promise(res => setTimeout(res, ms)); client.on('message', async msg => { // Ignora mensagens antigas if (msg.timestamp < botStartTime) { return; } if (msg.from === 'status@broadcast' || msg.from.includes('@g.us')) return; try { const chat = await msg.getChat(); await chat.sendStateTyping(); // ======================================================== // 1. SE O CLIENTE ENVIOU UM FICHEIRO / MÍDIA // ======================================================== if (msg.hasMedia) { console.log(`📥 Ficheiro recebido de: ${msg.from}. A transferir e enviar para o servidor...`); const media = await msg.downloadMedia(); if (media) { const form = new FormData(); form.append('telefone', msg.from); form.append('nome_arquivo', media.filename || 'documento_whatsapp.pdf'); form.append('arquivo_b64', media.data); // URL do seu ficheiro PHP na nuvem (Ajustado para a sua estrutura) const phpUrl = 'https://flaviofreitas.com.br/grafica-rapida-online-mp3/recebe_bot.php'; const response = await axios.post(phpUrl, form, { headers: form.getHeaders(), maxBodyLength: Infinity, // Importante para ficheiros grandes (ex: PDFs pesados) maxContentLength: Infinity }); if (response.data && response.data.link) { await delay(1500); await msg.reply(`✅ *Ficheiro Recebido com Sucesso!*\n\nClique no link abaixo para escolher as cores, cópias e finalizar o pagamento:\n\n🔗 ${response.data.link}`); console.log(`📤 Link mágico enviado para ${msg.from}`); } else { await msg.reply("❌ Desculpe, houve um erro ao processar o seu ficheiro no nosso sistema. Tente novamente."); console.error("Erro do servidor PHP:", response.data); } } return; // Interrompe aqui para não enviar mídias para a inteligência de texto } // ======================================================== // 2. SE FOR TEXTO NORMAL (FLUXO ORIGINAL MANTIDO) // ======================================================== console.log(`📩 Mensagem de texto de ${msg.from}: ${msg.body}`); const response = await axios.post('https://flaviofreitas.com.br/chat-bot/index3.php', new URLSearchParams({ 'action': 'chat', 'message': msg.body, 'phone': msg.from })); if (response.data && response.data.reply) { let botReply = response.data.reply .replace(//gi, '\n') .replace(/(.*?)<\/b>/gi, '*$1*') .replace(/<[^>]*>?/gm, ''); await delay(2500); await client.sendMessage(msg.from, botReply); } } catch (error) { console.error('❌ Erro no processamento:', error.message); } }); client.initialize();