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();