const { Client, LocalAuth } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const axios = require('axios');
// Objeto para armazenar o histórico de conversas
const conversationHistory = {};
// Função para processar mensagens usando Ollama com histórico
async function processMessage(text, userId) {
try {
// Inicializa o histórico do usuário, se não existir
if (!conversationHistory[userId]) {
conversationHistory[userId] = [];
}
// Adiciona a mensagem do usuário ao histórico
conversationHistory[userId].push({ role: "user", content: text });
// Limita o histórico para as últimas 10 interações
if (conversationHistory[userId].length > 10) {
conversationHistory[userId].shift();
}
const response = await axios.post('http://localhost:11434/api/generate', {
model: "deepseek-r1:latest",
prompt: `Você é um assistente amigável e bem-humorado. Responda à seguinte conversa:\n\n${
conversationHistory[userId]
.map(msg => (msg.role === "user" ? `Usuário: ${msg.content}` : `Assistente: ${msg.content}`))
.join("\n")
}\n\nAssistente:`,
stream: false
});
let reply = response.data.response.trim();
reply = reply.replace(/[\s\S]*?<\/think>/g, '').trim();
// Adiciona a resposta da IA ao histórico
conversationHistory[userId].push({ role: "assistant", content: reply });
console.log(`Resposta gerada para ${userId}: ${reply}`);
return reply;
} catch (error) {
console.error('Erro ao processar mensagem:', error);
return 'Desculpe, não consegui processar sua mensagem.';
}
}
// Função para aguardar um tempo
const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
// Inicializa o cliente do WhatsApp
const client = new Client({
authStrategy: new LocalAuth({ clientId: `deepseek` }) // Salva a sessão localmente
});
// Gera o QR Code no terminal
client.on('qr', (qr) => {
qrcode.generate(qr, { small: true });
});
// Quando estiver pronto, exibe uma mensagem
client.on('ready', () => {
console.log('Client is ready!');
});
// Escuta mensagens recebidas
client.on('message', async (message) => {
console.log(`Mensagem recebida de ${message.from}: ${message.body}`);
// Envia "digitando..."
const chat = await message.getChat();
await chat.sendStateTyping();
// Espera 5 segundos antes de processar
await wait(5000);
// Processa a mensagem com Ollama usando o histórico
const response = await processMessage(message.body, message.from);
// Responde a mensagem no WhatsApp
message.reply(response);
});
// Inicializa o cliente
client.initialize();