Recupere le contenu apres une commande / (discord.js)

a marqué ce sujet comme résolu.

bonjour, j’essaie de coder un bot discord chatgpt avec une commande / (du nom de "ping"), mais je n’arrive pas recuperer le contenu apres la commande. es que vous pourriez donc m’aider s’il vous plait

require("dotenv").config()

const {Client, GatewayIntentBits, ReactionEmoji} = require("discord.js");

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

// setting up open ai

const {Configuration, OpenAIApi} = require("openai")

const configuration = new Configuration({
    organization:process.env.OPENAI_ORG,
    apiKey:process.env.OPENAI_KEY
});

const openai = new OpenAIApi(configuration)

bot.on("ready", async () => {

    await bot.application.commands.set([
        {
            name: "ping",
            description: "Pong!"
        }
    ]);

    console.log("Le bot est prêt !");
});

bot.on("interactionCreate", async (interaction) => {

    if (interaction.commandName === "ping");
    if (!interaction.isCommand()) return;

        const response = await openai.createCompletion({
            model: "text-davinci-003",
            prompt : `Hey, donnez-moi une réponse pour cela : ${message.content}`,
            temperature: 0.5,
            max_tokens: 300,
            top_p: 1.0,
            frequency_penalty: 0.5,
            presence_penalty: 0.0,
          });

          message.reply(`${response.data.choices[0].text}`)});







bot.login(process.env.DISCORD_KEY);

l’erreur :

Uncaught ReferenceError ReferenceError: message is not defined
    at <anonymous> (c:\Users\Kareen\Desktop\my_ai_bot\index.js:44:65)
    at emit (events:513:28)
    at handle (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at handlePacket (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:352:31)
    at onPacket (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:489:22)
    at onMessage (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:328:10)
    at callListener (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\event-target.js:290:14)
    at onMessage (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\event-target.js:209:9)
    at emit (events:513:28)
    at receiverOnMessage (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\websocket.js:1180:20)
    at emit (events:513:28)
    at dataMessage (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\receiver.js:541:14)
    at getData (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\receiver.js:459:17)
    at startLoop (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\receiver.js:158:22)
    at _write (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\receiver.js:84:10)
    at writeOrBuffer (internal/streams/writable:392:12)
    at _write (internal/streams/writable:333:10)
    at Writable.write (internal/streams/writable:337:10)
    at socketOnData (c:\Users\Kareen\Desktop\my_ai_bot\node_modules\ws\lib\websocket.js:1274:35)
    at emit (events:513:28)
+0 -0

Salut ! Je me suis permis de corriger la mise en forme de ton message pour que ce soit plus lisible :)

L’erreur te dit que la variable message n’existe pas (message is not defined) ligne 44 (seconde ligne de l’erreur, à la fin, le 44:65, c’est le numéro de la ligne suivi de la position de l’erreur dans la ligne, ici au 65è caractère).

Si on regarde le bout concerné, ici, et qu’on regarde en particulier les lignes surlignées :

bot.on("interactionCreate", async (interaction) => {

    if (interaction.commandName === "ping");
    if (!interaction.isCommand()) return;

    const response = await openai.createCompletion({
            model: "text-davinci-003",
            prompt : `Hey, donnez-moi une réponse pour cela : ${message.content}`,
            temperature: 0.5,
            max_tokens: 300,
            top_p: 1.0,
            frequency_penalty: 0.5,
            presence_penalty: 0.0,
     });

     message.reply(`${response.data.choices[0].text}`)
});

La première ligne surlignée définit une fonction qui prend une variable interaction en paramètre. C’est la seule variable disponible ici, la seule qui est passée en paramètre à la fonction et aucune autre n’est créée dans la fonction.

À la seconde ligne surlignée (et troisième), tu essaies d’utiliser une variable message qui n’existe pas. J’imagine que tu as dû tenter de t’inspirer d’un bot qui lisait les messages (et alors cette variable existe, généralement), en l’adaptant pour une commande slash, mais ça ne fonctionne pas exactement pareil.

À lire la documentation, on accède à ce qui est passé en argument à la commande slash autrement.

Mais pour répondre plus précisément, il faudrait savoir quelle version de Discord.JS tu utilises ? D’autant que dans les versions récentes, ça a un peu changé (et été simplifié, si tu lis l’anglais je te recommande la lecture de la documentation officielle, à partir d’ici, qui explique tout).

Aussi connaître ton niveau en programmation et en JS serait un plus (est-ce que tu débutes à peine ? ou à peine en JS ? ou as-tu un peu de bouteille déjà ?).

Dans tous les cas, Discord va te demander d’en dire un peu plus sur ta commande. Ici tu l’as déclarée de façon très simple :

bot.on("ready", async () => {

    await bot.application.commands.set([
        {
            name: "ping",
            description: "Pong!"
        }
    ]);

    console.log("Le bot est prêt !");
});

…mais une telle commande n’acceptera aucun argument (aucun texte après la commande) car tu n’as pas indiqué à Discord que tu le souhaitais. C’est beaucoup plus cadré qu’un simple message, il faut être explicite sur ce qu’on autorise — ou non, et le nombre d’arguments derrière (si tu veux à la fois un texte et un nombre par exemple…), etc.

Si tu viens à peine de commencer ce bot je te conseille de vérifier que tu utilises bien la dernière version de Discord.JS (version 14), tant qu’à faire, et de regarder comment ils proposent de faire. L’idée étant de faire un fichier .js par commande pour rendre le code plus lisible (comme ça le jour où tu veux ajouter plein de nouvelles commandes, ça restera facile et lisible !).

N’hésite pas si tu as d’autres questions ou si quoique ce soit dans ma réponse n’est pas clair pour toi ! Bon courage :)

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte