Menu

Besoin d'aide pour mon Bot discord.JS avec Json [Résolu]

Messages postés
18
Date d'inscription
lundi 20 juin 2016
Dernière intervention
8 mars 2019
-
Bonjour,
je suis actuellement dans la création d'un bot discord.js avec javascript qui effectue des fonctions diverse et variée,
dans le but d’améliorer mon code j'ai décider de créer un json qui me permet de réunir l'ensemble des commandes de mon bot avec une courte explication de la fonction et de parcourir le tableau avec une boucle.
ma boucle fonctionne, elle parcours bien le tableau json,
le problème c'est que a chaque élément j'ai "undefined" et je ne vois pas ce qu'il me manque pour terminer la fonction

merci pour votre aide,
Bryan.

voici l'élément de code en Javascript
if (message.content.toLowerCase() === prefix + 'aide') {

         const help = new Discord.RichEmbed()
             .setTitle("Liste des commandes")
             .setColor(color)
             .setThumbnail(bot.user.avatarURL)
             .setFooter(`Bot développé par ${bot.users.get("monID").tag}`, bot.users.get("mon ID").avatarURL);
 
             for ( var info in aide.aidecmds ) {
                help.addField(info.name, info.value, true);
            }

            message.channel.send({ embed : help });
}


Lien entre mon index.js et le JSON
const aide = require("./commandes.json");


extrait du json qui contient 6 "name" et 6 "value"

{
    "aidecmds": [
        {
            "name": "ping",
            "value": "Je donne mon ping"
        },
        {
            "name": "roll",
            "value": "Je donne un nombre aléatoire entre 1 et 100"
        }
    ]
}


Le résultat :
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
3343
Date d'inscription
jeudi 16 juin 2005
Dernière intervention
19 mars 2019
1174
2
Merci
Bonjour,

La boucle for..in en javascript ne fonctionne pas tout à fait comme ça.
En fait, elle te donne la clef du tableau, et pas sa valeur. Du coup pour la valeur il faut y accéder avec [].
Ta boucle doit donc s'écrire :
             for (var infokey in aide.aidecmds) {
                var info = aide.aidecmds[infokey];
                help.addField(info.name, info.value, true);
            }

Xavier

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 47187 internautes nous ont dit merci ce mois-ci

Reivax962
Messages postés
3343
Date d'inscription
jeudi 16 juin 2005
Dernière intervention
19 mars 2019
1174 -
En fait je viens de lire un peu de doc, for..in est vraiment à utiliser avec des pincettes.
Esssaie plutôt avec for..of, qui fonctionne comme tu l'avais codé au début, donc :
             for ( var info of aide.aidecmds ) {
                help.addField(info.name, info.value, true);
            }

Xavier
Bryan1675
Messages postés
18
Date d'inscription
lundi 20 juin 2016
Dernière intervention
8 mars 2019
-
Bonsoir,
oui en effet après avoir essayer ta première solution, j'ai constater que ça me mettais une erreur,
j'ai donc essayer ta seconde solution et ça fonctionne, merci.

mais du coup quel est la différence entre un for... in et un for.. of ?

Bryan
Reivax962
Messages postés
3343
Date d'inscription
jeudi 16 juin 2005
Dernière intervention
19 mars 2019
1174 -
Alors perso j'ai lu surtout la première réponse à cette question, mais elle est en anglais :
https://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript
Bryan1675
Messages postés
18
Date d'inscription
lundi 20 juin 2016
Dernière intervention
8 mars 2019
-
Merci, je vais tenter de lire et comprendre ce qui est écrit,
encore merci pour mon bot ça m'a été d'une grande aide :3
Commenter la réponse de Reivax962