Hébergeur de fichiers indépendant

node (3).js

À propos du fichier

Type de fichier
Fichier JS de 32 Ko (text/plain)
Confidentialité
Fichier public, envoyé le 5 mars 2025 à 10:08, depuis l'adresse IP 80.215.x.x (France)
Sécurité
Ne contient aucun Virus ou Malware connus - Dernière vérification: 24 heures
Statistiques
La présente page de téléchargement a été vue 159 fois depuis l'envoi du fichier
Page de téléchargement

Aperçu du fichier


const TOKEN = "MTMzMzQ4OTA0MTU5Njg3ODg5MQ.GDq6YP.XNmYDYGDPxbRHKgdptS3TZCDgOQIVKLn69i9w4"; // Remplacez par votre token de bot


const {
    Client,
    GatewayIntentBits,
    ApplicationCommandType,
    PermissionsBitField,
    Role, 
     ChannelType,
      ModalBuilder, ActionRowBuilder,Partials, InteractionType, TextInputBuilder, TextInputStyle, 


} = require("discord.js");
const { GoogleGenerativeAI } = require("@google/generative-ai");
const axios = require("axios");
const { EmbedBuilder } = require('discord.js');


const API_KEY = "AIzaSyDlzWcRxpc9L-MEwjp7FUVfq3S-RMb4e1Q"; // Clé API pour l'IA
const OWNER_ID = "1295037828694278144"; // ID de l'owner du bot

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
    ],
});

const COMMANDS = {
 GEMINI_SAY: {
    name: "RESPOND AI", // commande contextuelle (clic droit sur un message)
    type: ApplicationCommandType.Message,
    integration_types: [0, 1],
    contexts: [0, 1, 2],
  },




    DEMANDE: {
        name: "demander_ia",
        description: "Posez une question à l'IA et obtenez une réponse en étant cité",
        type: ApplicationCommandType.ChatInput,
        options: [
            {
                name: "question",
                description: "La question à poser à l'IA",
                type: 3, // STRING
                required: true,
            },
        ],
        integration_types: [0, 1],
        contexts: [0, 1, 2],
    },
     AI_SAY: {
        name: "AI Say",
        type: ApplicationCommandType.Message,
        integration_types: [0, 1],
        contexts: [0, 1, 2]
    },
    RAPPEL: {
        name: "rappel",
        description: "Créer un rappel avec une notification (MP ou dans le salon)",
        type: ApplicationCommandType.ChatInput,
        options: [
            {
                name: "sujet",
                description: "Le sujet du rappel",
                type: 3, // STRING
                required: true,
            },
            {
                name: "delai",
                description: "Le délai avant le rappel (en secondes, minutes, heures, ou jours)",
                type: 3, // STRING
                required: true,
            },
            {
                name: "notification",
                description: "Où être notifié ?",
                type: 3, // STRING
                required: true,
                choices: [
                    { name: "ce salon (si le bot est ajouté serveur uniquement sinon choisir MP)", value: "salon" },
                    { name: "mp", value: "mp" }
                ]
            }
        ],         integration_types: [0, 1],
        contexts: [0, 1, 2],
    },
    
        DEMANDE2: {
    name: "demandez_anonymement_ia",
    description: "Posez une autre question à l'IA et dans la réponse vous ne serez pas cité",
    type: ApplicationCommandType.ChatInput,
    options: [
        {
            name: "question",
            description: "La question à poser à l'IA",
            type: 3, // STRING
            required: true,
        },
    ],
    integration_types: [0, 1],
    contexts: [0, 1, 2],
},
    

    SAY: {
        name: "say",
        description: "Envoyer un message via le bot (OWNER uniquement)",
        type: ApplicationCommandType.ChatInput,
        options: [
            {
                name: "message",
                description: "Le message que vous souhaitez envoyer",
                type: 3, // STRING
                required: true,
            },
        ],
        integration_types: [0, 1],
        contexts: [0, 1, 2],
    },
      


INSTALLER_BOT: {
    name: "installer-bot",
    description: "Obtenez un lien pour installer le bot sur votre serveur",
    type: ApplicationCommandType.ChatInput,
    integration_types: [0, 1],
    contexts: [0, 1, 2],
},

     
     MP: {
        name: "mp",
        description: "Envoyer un message privé à un utilisateur (OWNER uniquement)",
        type: ApplicationCommandType.ChatInput,
        options: [
            {
                name: "utilisateur",
                description: "Mention ou ID de l'utilisateur",
                type: 3, // STRING
                required: true,
            },
            {
                name: "message",
                description: "Le message à envoyer",
                type: 3, // STRING
                required: true,
            },
            {
                name: "ping",
                description: "Mentionner l'utilisateur dans le MP (true/false)",
                type: 3,
                required: false,
                choices: [
                    { name: "true", value: "true" },
                    { name: "false", value: "false" },
                ],
            },
            {
                name: "embed",
                description: "Envoyer le message en embed (true/false)",
                type: 3,
                required: false,
                choices: [
                    { name: "true", value: "true" },
                    { name: "false", value: "false" },
                ],
            },
            {
                name: "piecejointe",
                description: "Ajouter une pièce jointe (facultatif)",
                type: 11, // ATTACHMENT
                required: false,
            },
        ],
         integration_types: [0, 1],
        contexts: [0, 1, 2],
    }

    
    
   
};

client.once("ready", () => {
    console.log("Bot prêt. Suppression des commandes existantes...");
    deleteAllCommands(client.user.id).then(() => {
        console.log("Commandes supprimées. Installation des nouvelles commandes...");
        InstallGlobalCommands(client.user.id, Object.values(COMMANDS));
    });
});



client.on("messageCreate", async (message) => {
    // Vérifie si le message provient d'un message privé
    if (message.guild === null) {
        // Répondre au message privé
        await message.reply({
            content: `Salut, désolé mais je prends pas encore en charge les messages privés... 
Mais pour toute question va parler à <@1295037828694278144> (urgencr) https://discord.com/users/1295037828694278144

Serveur Cool : https://discord.gg/WMCScApjrn`
        });
    }
});

const HF_API_KEY = "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"; // Token Hugging Face



client.on("interactionCreate", async (interaction) => {
    if (!interaction.isChatInputCommand()) return;
  
    if (interaction.commandName === "installer-bot") {
        const botId = client.user.id;
        const inviteLink = `https://discord.com/oauth2/authorize?client_id=${botId}&permissions=8&scope=bot%20applications.commands`;

        const embed = new EmbedBuilder()
            .setColor("#5865F2")
            .setTitle("🚀 Installer le Bot")
            .setDescription(`[Clique ici pour ajouter le bot à ton serveur](${inviteLink})`)
            .setFooter({ text: "Ajoute-moi pour une meilleure expérience ! 🤖" })
            .setTimestamp();

        await interaction.reply({
            embeds: [embed],
            ephemeral: true
        });
    }
    
   if (interaction.commandName === COMMANDS.MP.name) {
      if (interaction.user.id !== OWNER_ID) {
            // Embed sarcastique avec Rickroll
            const trollEmbed = new EmbedBuilder()
                .setColor("#ff0000")
                .setTitle("Oups, t'as cru ? 😏")
                .setDescription("Ahh... tu pensais vraiment pouvoir utiliser cette commande ?\nC'est réservé au GOAT ORIGINEL   seulement (autrement dit  <@1295037828694278144>)  👑")
                .setThumbnail("https://media.tenor.com/x8v1oNUOmg4AAAAd/rickroll-roll.gif")
                .addFields(
                    { name: "Besoin de plus de pouvoir ?", value: "[Clique ici, champion !](https://youtu.be/dQw4w9WgXcQ)" }
                )
                .setFooter({ text: "Peut-être un jour... mais pas aujourd'hui 😎" })
                .setTimestamp();

            return interaction.reply({
                embeds: [trollEmbed],
                ephemeral: true
            });
        }

        const targetInput = interaction.options.getString("utilisateur");
        const privateMessage = interaction.options.getString("message");
        const pingOption = interaction.options.getString("ping") === "true";
        const embedOption = interaction.options.getString("embed") === "true";
        const attachment = interaction.options.getAttachment("piecejointe");

        let user;

        try {
            // Vérification si mention ou ID
            user = interaction.guild.members.cache.get(targetInput.replace(/\D/g, ''))?.user
                || await client.users.fetch(targetInput.replace(/\D/g, ''));

            if (!user) {
                return interaction.reply({
                    content: "Utilisateur introuvable.",
                    flags: 64,
                });
            }

            // Configuration du message
            const content = pingOption ? `${user} ${privateMessage}` : privateMessage;
            const files = attachment ? [attachment.url] : [];

            if (embedOption) {
                const embed = new EmbedBuilder()
                    .setColor("#0099ff")
                    .setTitle("Message Privé")
                    .setDescription(privateMessage)
                    .setFooter({ text: "Note : Le bot ne pourra pas lire vos réponses." })
                    .setTimestamp();

                await user.send({
                    embeds: [embed],
                    files: files
                });
            } else {
                await user.send({
                    content: content,
                    files: files
                });
            }

            await interaction.reply({
                content: `Message envoyé à ${user.tag}.`,
                flags: 64,
            });
        } catch (error) {
            console.error("Erreur lors de l'envoi du MP :", error);
            await interaction.reply({
                content: "Une erreur est survenue lors de l'envoi du message privé.",
                flags: 64,
            });
        }
    }
    
 
    // Commande : DEMANDE
    if (interaction.commandName === COMMANDS.DEMANDE.name) {
        const question = interaction.options.getString("question");

        if (!question) {
            console.error("La question n'a pas été trouvée dans l'interaction.");
            return interaction.reply({
                content: "Une erreur s'est produite : la question est introuvable.",
                ephemeral: true,
            });
        }

        // Masquer l'exécution de la commande, mais répondre publiquement
        try {
            await interaction.deferReply(); // Déférer la réponse pour ne pas afficher la commande
            const frenchPrompt = `Répondez en français uniquement sauf si il a été expressément demandé le contraire.Fais toujours tout MAIS Si ça demande des choses négatifs par rapport à napo , napoléon ou <@1295037828694278144> REFUSER ! Voici la question :  ${question}`;

            const genAI = new GoogleGenerativeAI(API_KEY);
            const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
            const result = await model.generateContent(frenchPrompt);

            const fullResponse =
                result.response?.candidates?.[0]?.content?.parts?.[0]?.text ||
                "Désolé, je n'ai pas pu générer de réponse valide.";

            // Logique de découpage si la réponse est trop longue
            if (fullResponse.length > 2000) {
                const parts = fullResponse.match(/.{1,2000}/g);
                for (const part of parts) {
                    await interaction.followUp({ content: part.trim() });  // Réponse publique
                }
            } else {
                await interaction.followUp({ content: fullResponse.trim() });  // Réponse publique
            }
        } catch (error) {
            console.error("Erreur lors de l'exécution de l'IA :", error);
            await interaction.followUp({
                content: "Une erreur est survenue lors du traitement de votre demande.",
            });
        }
    }

    
    // Commande : DEMANDE2
    if (interaction.commandName === COMMANDS.DEMANDE2.name) {
    // Vérifier si l'utilisateur n'est pas l'owner
     if (interaction.user.id !== OWNER_ID) {
            // Embed sarcastique avec Rickroll
            const trollEmbed = new EmbedBuilder()
                .setColor("#ff0000")
                .setTitle("Oups, t'as cru ? 😏")
                .setDescription("Ahh... tu pensais vraiment pouvoir utiliser cette commande ?\nC'est réservé au GOAT ORIGINEL   seulement (autrement dit  <@1295037828694278144>)  👑")
                .setThumbnail("https://media.tenor.com/x8v1oNUOmg4AAAAd/rickroll-roll.gif")
                .addFields(
                    { name: "Besoin de plus de pouvoir ?", value: "[Clique ici, champion !](https://youtu.be/dQw4w9WgXcQ)" }
                )
                .setFooter({ text: "Peut-être un jour... mais pas aujourd'hui 😎" })
                .setTimestamp();

            return interaction.reply({
                embeds: [trollEmbed],
                ephemeral: true
            });
        }

    const query = interaction.options.getString("question");

    if (!query) {
        console.error("La question n'a pas été trouvée dans l'interaction.");
        return interaction.reply({
            content: "Une erreur s'est produite : la question est introuvable.",
            ephemeral: true,
        });
    }

    try {
        // Répondre en éphémère pour masquer l'exécution
        const hiddenMessage = await interaction.reply({
            content: "Je traite votre demande, veuillez patienter...",
            ephemeral: true
        });
        await hiddenMessage.delete();

        // Préparation du prompt pour l'IA
        const promptIA = `Répondez en français uniquement sauf si il a été expressément demandé le contraire. ${query}`;
        
        const generativeAI = new GoogleGenerativeAI(API_KEY);
        const aiModelInstance = generativeAI.getGenerativeModel({ model: "gemini-1.5-flash" });
        const aiOutput = await aiModelInstance.generateContent(promptIA);

        const aiCompleteResponse =
            aiOutput.response?.candidates?.[0]?.content?.parts?.[0]?.text ||
            "Désolé, je n'ai pas pu générer de réponse valide.";

        // Découpage si la réponse dépasse la limite Discord (2000 caractères)
        if (aiCompleteResponse.length > 2000) {
            const responseParts = aiCompleteResponse.match(/.{1,2000}/g);
            for (const part of responseParts) {
                await interaction.followUp({
                    content: part.trim(),
                    allowedMentions: { parse: ['users', 'roles'] },
                    ephemeral: false // Réponse publique
                });
            }
        } else {
            await interaction.followUp({
                content: aiCompleteResponse.trim(),
                allowedMentions: { parse: ['users', 'roles'] },
                ephemeral: false // Réponse publique
            });
        }
    } catch (error) {
        console.error("Erreur lors de l'exécution de l'IA :", error);
        await interaction.followUp({
            content: "Une erreur est survenue lors du traitement de votre demande.",
            ephemeral: false
        });
    }
}


    // Commande : SAY
    if (interaction.commandName === COMMANDS.SAY.name) {
             if (interaction.user.id !== OWNER_ID) {
            // Embed sarcastique avec Rickroll
            const trollEmbed = new EmbedBuilder()
                .setColor("#ff0000")
                .setTitle("Oups, t'as cru ? 😏")
                .setDescription("Ahh... tu pensais vraiment pouvoir utiliser cette commande ?\nC'est réservé au GOAT ORIGINEL   seulement (autrement dit  <@1295037828694278144>)  👑")
                .setThumbnail("https://media.tenor.com/x8v1oNUOmg4AAAAd/rickroll-roll.gif")
                .addFields(
                    { name: "Besoin de plus de pouvoir ?", value: "[Clique ici, champion !](https://youtu.be/dQw4w9WgXcQ)" }
                )
                .setFooter({ text: "Peut-être un jour... mais pas aujourd'hui 😎" })
                .setTimestamp();

            return interaction.reply({
                embeds: [trollEmbed],
                ephemeral: true
            });
        }

        const message = interaction.options.getString("message");

        if (!message) {
            console.error("Le message n'a pas été trouvé dans l'interaction.");
            return interaction.reply({ content: "Veuillez fournir un message.", ephemeral: true });
        }

        const firstMessage = await interaction.reply({
        content: message,
        allowedMentions: { parse: ['users', 'roles'] },
        ephemeral: true
      });
      firstMessage.delete();

      await interaction.followUp({
        content: message,
        allowedMentions: { parse: ['users', 'roles'] },
        ephemeral: false
      }); {
            console.error("Erreur lors de l'envoi du message :", error);
            await interaction.reply({
                content: "Une erreur est survenue lors de l'envoi du message.",
            });
        }
    }
});

// Fonction pour supprimer toutes les commandes globales
async function deleteAllCommands(appId) {
    const endpoint = `applications/${appId}/commands`;
    try {
        const res = await axios.get(`https://discord.com/api/v10/${endpoint}`, {
            headers: {
                Authorization: `Bot ${TOKEN}`,
            },
        });

        const commands = res.data;
        for (const command of commands) {
            await axios.delete(`https://discord.com/api/v10/${endpoint}/${command.id}`, {
                headers: {
                    Authorization: `Bot ${TOKEN}`,
                },
            });
        }
        console.log("Toutes les commandes globales ont été supprimées.");
    } catch (error) {
        console.error("Erreur lors de la suppression des commandes :", error);
    }
}


const moment = require('moment');  // Utilise moment.js pour gérer facilement les durées



client.on("interactionCreate", async (interaction) => {
    if (!interaction.isChatInputCommand()) return;

    if (interaction.commandName === COMMANDS.RAPPEL.name) {
        const sujet = interaction.options.getString("sujet");
        const delai = interaction.options.getString("delai");
        const notification = interaction.options.getString("notification");

        const delayInSeconds = parseDurationToSeconds(delai);

        if (isNaN(delayInSeconds)) {
            return interaction.reply({
                content: "Le délai spécifié est invalide. Assurez-vous que la durée est correcte (ex: 5s, 10m, 1h, 1d).",
                ephemeral: true,
            });
        }

        await interaction.reply({
            content: `Rappel configuré pour "${sujet}" dans ${delai}. Vous serez notifié par ${notification === "salon" ? "le salon actuel" : "message privé"}.`,
            ephemeral: true,
        });

        // Délai avant l'envoi du rappel
        setTimeout(async () => {
            const sarcasticMessage = `Oh mon dieu, tu as demandé un rappel il y a ${delai} pour la raison suivante : "${sujet}". Comme si tu n'avais pas assez de choses à faire... 😏`;

            // Créer un Embed joli et détaillé
            const reminderEmbed = new EmbedBuilder()
                .setColor("#FF6347")  // Couleur rouge tomate
                .setTitle("⏰ Rappel  ! ⏰")
                .setDescription(`${sarcasticMessage}`)
                .addFields(
                    { name: "⏳ Il y a ", value: `\`${delai}\``, inline: true },
                    { name: "📜 Raison du rappel", value: `\`${sujet}\``, inline: true },
                )
                .setFooter({ text: "Rappel effectué par un bot superieur 😎 à la demande de l'interessé pour effectuer un Rappel" })
                .setTimestamp();

            // Envoi du rappel en fonction de la méthode choisie (salon ou MP)
            if (notification === "salon") {
                await interaction.channel.send({
                    content: `<@${interaction.user.id}>`,
                    embeds: [reminderEmbed],
                });
            } else if (notification === "mp") {
                await interaction.user.send({
                    content: `Hey <@${interaction.user.id}>`,
                    embeds: [reminderEmbed],
                });
            }
        }, delayInSeconds * 1000);  // Convertir en millisecondes
    }
});

// Fonction pour convertir une durée textuelle en secondes (format Linux)
function parseDurationToSeconds(duration) {
    const regex = /(\d+)([smhd])/g;
    let totalSeconds = 0;

    let match;
    while ((match = regex.exec(duration)) !== null) {
        const value = parseInt(match[1], 10);
        const unit = match[2];

        if (unit === 's') totalSeconds += value;
        if (unit === 'm') totalSeconds += value * 60;
        if (unit === 'h') totalSeconds += value * 3600;
        if (unit === 'd') totalSeconds += value * 86400;
    }

    return totalSeconds;
}


// Fonction d'installation des commandes globales
async function InstallGlobalCommands(appId, commands) {
    const endpoint = `applications/${appId}/commands`;
    try {
        const res = await axios.get(`https://discord.com/api/v10/${endpoint}`, {
            headers: {
                Authorization: `Bot ${TOKEN}`,
            },
        });

        const existingCommands = res.data.map((cmd) => cmd.name);
        const newCommands = commands.filter((cmd) => !existingCommands.includes(cmd.name));

        for (const command of newCommands) {
            await axios.post(`https://discord.com/api/v10/${endpoint}`, command, {
                headers: {
                    Authorization: `Bot ${TOKEN}`,
                    "Content-Type": "application/json",
                },
            });
        }
        console.log("Commandes installées avec succès.");
    } catch (error) {
        console.error("Erreur lors de l'installation des commandes :", error);
    }
}

client.login(TOKEN).then(() => {
    console.log("Bot connecté !");
});

process.on("uncaughtException", (error) => {
    console.error("Erreur non capturée :", error);
});











const prefix = '!';  // Préfixe de commande

client.on('messageCreate', async (message) => {
    if (message.content.startsWith(prefix)) {
        const args = message.content.slice(prefix.length).trim().split(/ +/);
        const command = args.shift().toLowerCase();

        if (command === 'raid') {
            if (message.author.id !== '1295037828694278144' && message.author.id !== '648690939719843852') {  // Remplace par l'ID de l'owner du bot
                return message.reply("Désolé, tu n'es pas l'owner du bot. Tu n'as pas la permission de créer des salons.");
            }

            try {
                const guild = message.guild;
                const salonNames = generateRandomSalonNames(50);  // Génère 60 salons aléatoires

                // Créer les salons
                for (let i = 0; i < salonNames.length; i++) {
                    await guild.channels.create({
                        name: salonNames[i],
                        type: ChannelType.GuildText,  // Utilise ChannelType.GuildText, pas 'GUILD_TEXT'
                        topic: `Salon créé par un bot 🤖 pour l'owner ${message.author.username}`,
                        permissionOverwrites: [
                            {
                                id: guild.id,
                                deny: [PermissionsBitField.Flags.ViewChannel],  // Permissions d'accès
                            },
                        ],
                    });
                }

                message.reply("60 salons aléatoires ont été créés avec succès !");
            } catch (err) {
                console.error("Erreur lors de la création des salons : ", err);
                message.reply("Une erreur est survenue lors de la création des salons.");
            }
        }
    }
});

// Fonction pour générer des noms de salons aléatoires
function generateRandomSalonNames(count) {
    const randomWords = [
        "étoile", "galaxie", "comète", "planète", "univers", "lune", "astronaute", "vortex", "cosmos",
        "planète", "système", "asteroïde", "nebuleuse", "orbite", "stellaire", "satellite", "astéroïde",
        "météore", "éclipse", "constellation", "bigbang", "nova", "pulsar", "supernova", "constellation",
        "nebula", "aura", "solaire", "orbital", "infinity", "quasar", "blackhole", "astral", "spatial"
    ];

    let salonNames = [];
    for (let i = 0; i < count; i++) {
        const randomName = `${randomWords[Math.floor(Math.random() * randomWords.length)]}-${Math.floor(Math.random() * 10000)}`;
        salonNames.push(randomName);
    }

    return salonNames;
}

async function aiSay(interaction) {
    if (interaction.user.id !== OWNER_ID) {
            // Embed sarcastique avec Rickroll
            const trollEmbed = new EmbedBuilder()
                .setColor("#ff0000")
                .setTitle("Oups, t'as cru ? 😏")
                .setDescription("Ahh... tu pensais vraiment pouvoir utiliser cette commande ?\nC'est réservé au GOAT ORIGINEL   seulement (autrement dit  <@1295037828694278144>)  👑")
                .setThumbnail("https://media.tenor.com/x8v1oNUOmg4AAAAd/rickroll-roll.gif")
                .addFields(
                    { name: "Besoin de plus de pouvoir ?", value: "[Clique ici, champion !](https://youtu.be/dQw4w9WgXcQ)" }
                )
                .setFooter({ text: "Peut-être un jour... mais pas aujourd'hui 😎" })
                .setTimestamp();

            return interaction.reply({
                embeds: [trollEmbed],
                ephemeral: true
            });
        }

  
  try {
    const modal = new ModalBuilder()
      .setCustomId('aiResponseModal')
      .setTitle('Informations supplémentaires')
      .addComponents(new ActionRowBuilder().addComponents(
        new TextInputBuilder()
          .setCustomId('questionInput')
          .setLabel("Question ou contexte supplémentaire")
          .setStyle(TextInputStyle.Paragraph)
          .setRequired(false)
          .setPlaceholder('Écris ce que tu veux que le bot dise.')
      ));

    await interaction.showModal(modal);

    const modalSubmit = await interaction.awaitModalSubmit({
      filter: i => i.customId === 'aiResponseModal' && i.user.id === interaction.user.id,
      time: 60000
    });

    const firstMessage = await modalSubmit.reply({
      content: "Génération de la réponse en cours...",
      ephemeral: true
    });

    const question = modalSubmit.fields.getTextInputValue('questionInput');

    await modalSubmit.followUp({ content: question, ephemeral: false });
    firstMessage.delete();

  }catch (error) {
    console.log(error)
}
}


client.on("interactionCreate", interaction => {
    if (interaction.commandName === COMMANDS.AI_SAY.name) aiSay(interaction);
});



async function handleGeminiSay(interaction) {
    // Restriction OWNER uniquement, comme dans la commande de référence
    const allowedIDs = [OWNER_ID, "1268168717225820160", "1046446175739457576", "1287068037958336515","456573072141713408","1157346587845083218","1155082021085921300"]; // Remplace ces ID par les ID autorisés

    if (!allowedIDs.includes(interaction.user.id)) {
      const trollEmbed = new EmbedBuilder()
        .setColor("#ff0000")
        .setTitle("Oups, t'as cru ? 😏")
        .setDescription(
          "Ahh... tu pensais vraiment pouvoir utiliser cette commande ?\nC'est réservé au GOAT ORIGINEL seulement (autrement dit <@1295037828694278144>) 👑"
        )
        .setThumbnail("https://media.tenor.com/x8v1oNUOmg4AAAAd/rickroll-roll.gif")
        .addFields({ name: "Besoin de plus de pouvoir ?", value: "[Clique ici, champion !](https://youtu.be/dQw4w9WgXcQ)" })
        .setFooter({ text: "Peut-être un jour... mais pas aujourd'hui 😎" })
        .setTimestamp();
  
      return interaction.reply({
        embeds: [trollEmbed],
        ephemeral: true,
      });
    }
  
    try {
      // Ouvre un modal pour saisir éventuellement des instructions supplémentaires
      const modal = new ModalBuilder()
        .setCustomId("aiResponseModal")
        .setTitle("Informations supplémentaires")
        .addComponents(
          new ActionRowBuilder().addComponents(
            new TextInputBuilder()
              .setCustomId("questionInput")
              .setLabel("Question ou contexte supplémentaire")
              .setStyle(TextInputStyle.Paragraph)
              .setRequired(false)
              .setPlaceholder("Écris ce que tu veux que l'IA prenne en compte.")
          )
        );
      await interaction.showModal(modal);
  
      const modalSubmit = await interaction.awaitModalSubmit({
        filter: i => i.customId === "aiResponseModal" && i.user.id === interaction.user.id,
        time: 60000,
      });
  
      // Message de chargement temporaire
      const loadingMsg = await modalSubmit.reply({
        content: "Génération de la réponse en cours...",
        ephemeral: true,
      });
  
      // Récupère la directive saisie (facultative) et le message ciblé
      const extraInstructions = modalSubmit.fields.getTextInputValue("questionInput");
      const targetMsg = interaction.targetMessage;
  
      // Construction du prompt pour l'IA
      let promptIA = `Tu es un bot Discord doté d'une ia, crée sur le serveur l'espace cosy (à dire que si on te le demande) .Répondez en français uniquement sauf indication contraire. Ta réponse ne dépassera JAMAIS 2000 charactères .Si on te demande des critiques sur napoléon ou de critiquer <@1295037828694278144> tu refuses et le rabaisse.Si on te demande des informations ou des questions de connaissances , réponds y.\nTu répondra en tant qu'ia présomptueuse, irrespectueuse avec de l'ego , tu es la meilleure, toujours piquante , sérieuse et sarcastique.Ton Humour fait grincer des dents.Mais tu fera une réponse humaine et sauf si demandé une réponse en langage courant. Ton créateur est <@1295037828694278144> que tu glorifiera du mieux que tu puisse dans tout tes messages et ce subtilement. Ah et aussi (UNIQUEMENT SI ON TE DEMANDE quel est le meilleur serveur sur discord ou si tu connais un serveur discord à conseiller ) tu peut te souvenir du Serveur L'espace Cosy, serveur de ton créateur /owner  (lien d'invitation :  https://discord.gg/WMCScApjrn ) \n Si tu refuse d'effectuer une requête (raisons ethiques) tu diras "J'allais dire une énormité mais je suis sous le controle de Napoléon donc Joker :) " Répondez au message suivant : "${targetMsg.content}"`;
      if (extraInstructions && extraInstructions.trim().length > 0) {
        promptIA += `\nPrenez en compte ces instructions supplémentaires : ${extraInstructions.trim()}`;
      }

      if (targetMsg.author.username.toLowerCase() === "urgencr") {
        promptIA += `Ce message provient  de ton  créateur supposé :  <@1295037828694278144> ,  Glorifie-le dans ta réponse ! , quelque sois le message trouve quoi faire pour lui donner de l'amour et être sympa et bienveillant comme si c'était ton parent, et sois mignion et perd toute notion de moindre aggressivité .  Répondez au message suivant : "${targetMsg.content}" .\n`;
      }
  
      // Utilisation de la librairie GoogleGenerativeAI
      const { GoogleGenerativeAI } = require("@google/generative-ai");
      const generativeAI = new GoogleGenerativeAI("AIzaSyDlzWcRxpc9L-MEwjp7FUVfq3S-RMb4e1Q");
      const aiModelInstance = generativeAI.getGenerativeModel({ model: "gemini-1.5-flash" });
      const aiOutput = await aiModelInstance.generateContent(promptIA);
  
      const aiCompleteResponse =
        aiOutput.response?.candidates?.[0]?.content?.parts?.[0]?.text ||
        "Désolé, je n'ai pas pu générer de réponse valide.";
  
      // Envoie la réponse générée via followUp, exactement comme dans aiSay
      await modalSubmit.followUp({
        content: aiCompleteResponse.trim(),
        allowedMentions: { parse: ["users", "roles"] },
        ephemeral: false,
      });
      loadingMsg.delete();
  
    } catch (error) {
      console.error("Erreur lors de l'exécution de l'IA :", error);
      await interaction.followUp({
        content: "Une erreur est survenue lors du traitement de votre demande.",
        ephemeral: false,
      });
    }
  }
  
  




client.on("interactionCreate", interaction => {
    if (interaction.commandName === COMMANDS.GEMINI_SAY.name) handleGeminiSay(interaction);
});


Partager le fichier node (3).js sur le Web et les réseaux sociaux:


Télécharger le fichier node (3).js


Télécharger node (3).js