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