Bonjour à tous !

J'ai commencé le codage de mon tout premier bot pour discord, son but sera d'interagir dans une discussion.

le Code :

const Discord = require("discord.js");
const fs = require('fs');
const bot = new Discord.Client();
bot.on('ready', () => {
bot.user.setActivity("harceler les joueurs");
console.log("Je suis connecté !");
})
bot.on('message', message =>{
if (message.author.bot) return;
user = message.author;
let member = message.guild.member(message.author);
let Agree = message.guild.roles.cache.find(role => role.name === 'TEST');
if(message.content == "Salut"){
message.channel.send(Salut ${user}, tu vas bien?);
bot.on('message', message =>{
if (message.author.bot) return;
if (message.content == "Comme un lundi"){
message.channel.send(MDR, toujours aussi décalé le ${user});
}
})
}
});

ce que j'attend, en exemple :

1
User : Salut
Bot : Salut user, tu vas bien ?
User: Comme un Lundi
Bot : toujours aussi décalé

2
User : Salut
Bot : Salut user, tu vas bien ?
User: tagadoz
(pas de réaction bot, le bot doit revenir à l’attente de "Salut")

3
User : Comme un lundi
(pas de réaction bot, il reste en attente de "Salut")

Ce que j'obtiens :

-je peux répéter autant de fois que je veux "Salut", le bot répond comme il faut une seul fois par "Salut user". (OK)
-Mais si après cela je répond une seule fois "Comme un lundi", le bot me colle plusieurs fois la bonne réponse. (PAS OK)
-Je dis "salut" une fois, le bot répond, puis je repond autant de fois que je veux "Commme un lundi", le bot répond une fois à chaque fois, alors que j’attend qu’il ne réponde que au premier "comme un lundi", puisque les suivant n’ont pas eu l’étape du "Salut" (PAS OK).

1 réponse


Ton problème principal est surtout que tu relances une écoute de message dans la première écoute de message.

En résumé, tu stack tes évênements. Prévois plutôt un système de "steps" (je parlerai pas des notions plus avancées en créations de chatbot).

En résumé, créé un objet ave l'id de ton utilisateur et l'étape où il en est pour pouvoir avancer dans la conversation.

Petit exemple :

let users = {};
bot.on('message', message => {
    if (message.author.bot) return;
    user = message.author;

    // Création du user si existe pas
    if (!users[user.id]) {
        users[user.id] = 0;
    }

    let member = message.guild.member(message.author);
    // Etape 1, on doit donc être à l'étape 0
    if(users[user.id] === 0 && message.content === "Salut"){
        users[user.id] = 1;
        message.channel.send(`Salut ${user}, tu vas bien?`);
    // Etape 2, on doit avoir passé l'étape 1
    } else if(users[user.id] =1 && message.content === "Comme un lundi"){
        // Tu peux faire un retour à 0 si tu veux pas aller plus loin
        users[user.id] = 2;
        message.channel.send(`MDR, toujours aussi décalé le ${user}`);
    } else {
        // Si on passe pas dans une des étapes suppression de l'étape pour ne pas surcharger la mémoire
        delete users[user.id];
    }
})

Ca reste bien entendu très basique (et ce n'est pas une façon de faire que je te conseille), mais tu devrais avoir une idée pour avancer.