Question sur les varaibles (pour un bot discord).

- - Dernière réponse :  PierreSM - 30 juin 2019 à 13:16
Bonjour,
Je créer un bot discord avec la librairie Discord.js.
Je souhaite créer un système de calcul permanent mais individualisée à chaque membres.
Pour cela, j'ai créer une commande '!go2 <id user>' qui lance le système en créant une variable ayant pour nom l'id du membre.
Ensuite, quand le membre le souhaite, il tape '!stats <id user>', ce qui lance le calcul et lui donne sa variable en message. Le principe est que l'id du membre est défini au départ ('!go2 <id>') comme une variable contenant 100. Ensuite, quand le membre fait '!stats <id>', cette variable est reprise (parmi toutes les variables de tout les membres) et le programme fait le calcul.

mon code est :

const Command = require('./commands');
const PREFIX = ('!');

module.exports = class Gotest extends Command{

    static match (message) {
        if(message.content[0] === PREFIX) {
            (this.action(message));
        }
    }

    static action (message) {
        const splitMessage3 = message.content.split(' ');
        if(splitMessage3[0] === '!go2') {
            splitMessage3[1] = 100;
            console.log('variable affecté');
        }
// la variable id est pas conservée
        const splitMessage4 = message.content.split(' ');
        if (splitMessage4[0] === '!stats') {
            console.log('message détecté !');
            splitMessage3[1] = splitMessage3[1] * 1.8;
            console.log('Calculs en cours ...');
            message.reply('Votre population est de ' + splitMessage3[1]);
            return console.log('message envoyé !')
        }

    }

};


Le problème est donc que la variable id du membre qui est égale à 100 dans le bloc de la commande '!go2 <id user>' n'est pas conservé dans le bloc de la deuxième commande '!stats <id user>'.
Comment serai-t-il possible de la conserver dans le 2ème bloc sans la paramétré au départ (tout en haut du code) ?

J'ai essayer de mettre le deuxième bloc conditionnel (pour la commande '!stats <id user>') dans le premier, mais dans ce cas, il n'arrive pas à prendre en compte le nouveau message c'est à dire, le membre fait '!go2 <id user>', puis plus tard, veux consulter ses résultats avec '!stats <id user>', le programme ne prend pas en compte le '!stats <id user>', il reste sur la 1ère commande.
J'utilise dans mon programme 'message.content' pour lire le contenu du message.
Hésisterai-t)il une commande qui lise le contenu du nouveau message ? Comment faire pour que le 2ème bloc soit dans le premier et que le programme prennent en compte le nouveau message '!stats <id user>' ?
(j'ai regarder sur Discord.js.org mais je trouve pas).

Merci d'avance,
Pierre.





Configuration: Macintosh / Firefox 67.0
Afficher la suite 

1 réponse

0
Merci
Bonjour,

Je pense que tu n'as pas compris le fonctionnement de l'api discord.js.
La methode action est appelé à chaque fois qu'un message tapé commence par le caractere défini (ici !) avec en parametre le contenu du message.
Ensuite, tu split le contenu du message selon l'espace pour récuperer la commande (go2 ou stats) et le contenu de la commande (id_user) sous forme de tableau.
pour que ton code puisse fonctionne il faudrait faire:

const Command = require('./commands');
const PREFIX = ('!');

module.exports = class Gotest extends Command{

static match (message) {
if(message.content[0] === PREFIX) {
(this.action(message));
}
}
var variable = {};
static action (message) {
const splitMessage = message.content.split(' ');
if(splitMessage[0] === '!go2') {
variable[splitMessage[1]] = 100;
console.log('variable affecté');
}
if (splitMessage[0] === '!stats') {
console.log('message détecté !');
variable[splitMessage[1]] = variable[splitMessage[1]] * 1.8;
console.log('Calculs en cours ...');
message.reply('Votre population est de ' + variable[splitMessage[1]]);
return console.log('message envoyé !')
}

}

};


Mais je ne suis pas convaincu que les variables global soit conservé d'un message à l'autre.
Auquel cas il faudrait stocker les données dans une bdd.

Xavier
En effet, ça ne marche pas, mais le problème est dans la définition de la "variable" :
var variable = {};


Le terminal me met un erreur comme quoi il est impossible de mettre le "var".
Et sinon Comment j'utilise une bdd ?
Commenter la réponse de xav3601