Bot Discord : Comment intégrer une collection dans un JSON

Signaler
Messages postés
16
Date d'inscription
vendredi 31 mai 2019
Statut
Membre
Dernière intervention
1 juin 2020
-
Messages postés
16
Date d'inscription
vendredi 31 mai 2019
Statut
Membre
Dernière intervention
1 juin 2020
-
Bonjour,

Je suis actuellement dans une impasse avec la programmation en nodejs de mon bot discord.

Je suis en train de créer une collection regroupant plusieurs collections contenant des variables d'environnement propres à chaque serveur.

L'arborescence de cette collection est du type suivant :

Collection [Map] {
   '<guildID1>' => Collection [Map] {
      '<variable1>' => '<value1>',
      '<variableX>' => '<valueX>',
   },
   '<guildIDX>' => Collection [Map] {
      '<variable1>' => '<value1>',
      '<variableX>' => '<valueX>',
   }
}


Mon but est d'exporter cette collection en format JSON dans un fichier interne au projet, afin de le récupérer à chaque redémarrage du bot, pour tout simplement enregistrer les configurations de chaque serveur. Car maintenant je dois tout écrire à la main dans chaque serveur pour initialiser chaque variable.
Le problème est qu'on ne peut exporter que des Objets dans ce type de fichier.

J'aurais donc besoin de "convertir" ces Collections en un Objet, ou d'utiliser un autre format de fichier pouvant accueillir ces Collections.

Merci par avance,

Cordialement,

Kilian.

Message modifié par la modération
Pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE

1 réponse

Messages postés
16
Date d'inscription
vendredi 31 mai 2019
Statut
Membre
Dernière intervention
1 juin 2020

Bon au final j'ai trouvé en cherchant un peu... Le problème avec cette méthode est qu'il faut créer et modifier au besoin l'Objet nécessaire à l'exportation en JSON.
Pour exporter une Collection en JSON j'ai donc dû passer par un Objet, puis en initialisant chaque variable avec celle de la Collection.
J'ai deux Collections initiales appelées client.env et envVariables.

client.env = new Collection();
const variablesEnv = new Collection();


Ensuite je créer une fonction permettant de charger le fichier de configuration dès le démarrage de mon bot (à placer donc à l'extérieur de toute autre fonction, si possible dès le début de votre code, après les affectations de constantes) :

function loadEnvVariables(JSONsave = require("<chemin du fichier de configuration>")) {
  JSONsave.forEach(object => {
    const envVariables = object.envVariables;

    variablesEnv.set("prefix", envVariables.prefix);
    variablesEnv.set("welcome", envVariables.welcome);

    client.env.set(object.guildID, variablesEnv);
  });
}

loadEnvVariables();


Ne pas oublier de mettre
loadEnvVariables();
à la fin pour exécuter la fonction au démarrage du bot.
Cette partie est donc à insérer dans votre fichier principal,
main.js
,
index.js
ou tout autre nom de fichier et permet de récupérer le contenu du fichier JSON afin de l'affecter à
client.env
.
client.env
contient les variables d'environnement que le bot utilisera.
envVariables
est uniquement utilisée dans la fonction pour récupérer toutes les variables d'environnement. Elle est donc inutile pour la suite.

Pour affecter les variables d'environnement en temps réel, j'ai personnellement opté pour un fichier de commande appelé
cfg.js
accessible via la commande
?cfg
. Mais peu importe de comment vous procédez, cela reste pareil au même.

Pour affecter la bonne valeur à la bonne variable en fonction du serveur où l'on se trouve j'ai procédé de la manière suivante :
  let toJSON = new Array();

  function envConfig(guildID, envVariables) {
    this.guildID = guildID;
    this.envVariables = envVariables;
  }

  client.env.each((collec, guildID) => {
    let envCfg = new envConfig(guildID, {
      prefix: collec.get("prefix"),
      welcome: collec.get("welcome")
    });

    toJSON.push(envCfg);
  });

  let configJSON = JSON.stringify(toJSON);

  writeFile("<chemin du fichier de configuration>", configJSON, err => {
    if (err) throw err;
  });


Insérez ce code dans la partie où l'utilisateur tape la commande de configuration. Par exemple basiquement dans
client.on("message")
ou comme moi dans un fichier à part
cfg.js
.

C'est aussi simple que ça pour exporter une Collection en format JSON, et oui ! :D