const { Client, GatewayIntentBits } = require('discord.js');
const axios = require('axios');

const client = new Client({
    intents: [
        GatewayIntentBits.DirectMessages,
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildBans,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,

    ]
});

const DISCORD_TOKEN = 'MTE0NzQ5OTA1NTU4OTYyNTk0Nw.GPoJr8.rO4tivOOx9gZ1bOCjIwk3buyvziZH5t304ENOI'; 
const OPENAI_API_KEY = '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';

client.once('ready', () => {
    console.log('Bot is ready!');
});
client.on('ready', () => {
    console.log(`Bot loggato come ${client.user.tag}!`);
});


client.on('error', console.error);

client.on('messageCreate', async message => {
    console.log(`Messaggio da ${message.author.tag}: ${message.content}`);
    
    if (message.author.bot) return;

    // Se il messaggio inizia con '!ask', il bot risponderà.
    if (message.content.toLowerCase().startsWith('!ask')) {
        const question = message.content.slice(5); // rimuove "!ask" dal messaggio
        
        const response = await askGPT3(question);
        message.channel.send(response);
    }
});

client.login(DISCORD_TOKEN);

async function askGPT3(question) {
    const endpointURL = 'https://api.openai.com/v1/engines/davinci/completions';
    const headers = {
        'Authorization': `Bearer ${OPENAI_API_KEY}`,
        'Content-Type': 'application/json'
    };
    const payload = {
        prompt: question,
        max_tokens: 150
    };

    try {
        const response = await axios.post(endpointURL, payload, { headers: headers });
        return response.data.choices[0].text.trim();
    } catch (error) {
    if (error.response && error.response.status === 429) {
        console.error("Limite di richiesta raggiunto. Riprova più tardi.");
        return 'Non posso rispondere in questo momento';
    } else {
        console.error("Errore durante la chiamata API:", error);
        return "Errore durante la chiamata API:";
    }
}
}