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

Signaler
Messages postés
18
Date d'inscription
lundi 20 juin 2016
Statut
Membre
Dernière intervention
8 mars 2019
-
Messages postés
18
Date d'inscription
lundi 20 juin 2016
Statut
Membre
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 :

1 réponse

Messages postés
3603
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
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
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 64380 internautes nous ont dit merci ce mois-ci

Messages postés
3603
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
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
Messages postés
18
Date d'inscription
lundi 20 juin 2016
Statut
Membre
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
Messages postés
3603
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
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
Messages postés
18
Date d'inscription
lundi 20 juin 2016
Statut
Membre
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