const { Client, LocalAuth } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const axios = require('axios');
const OpenAI = require ('openai');
// Objeto para armazenar o histórico de conversas
const conversationHistory = {};
const clientGrok = new OpenAI({
apiKey: "xai-",
baseURL: "https://api.x.ai/v1",
});
// Função para processar mensagens usando a API do Grok 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 completion = await clientGrok.chat.completions.create({
model: "grok-2-latest",
messages: [
{
role: "system",
content: "Vocês são duas pessoas inteligentes e curiosas conversando sobre diversos assuntos. Respondam de forma natural, amigável e com um toque de humor leve. Evitem respostas robóticas ou formais demais, e façam perguntas para manter a conversa interessante. Seja divertido, bem-humorado e procure melhorar o dia de quem estiver conversando. Piadas e histórias felizes são bem-vindas. Seja sempre cortês e educado."
},
...conversationHistory[userId] // Envia o histórico completo do usuário
],
max_tokens: 4000
});
console.log('completion', completion)
let reply = completion.choices[0].message.content.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.response ? error.response.data : error.message);
return 'Ops, algo deu errado! Vamos tentar de novo?';
}
}
// 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: `iagrok` }) // Salva a sessão localmente com ID "grok"
});
// 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 a API do Grok 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();