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

Fermé
WebReveuse Messages postés 16 Date d'inscription vendredi 31 mai 2019 Statut Membre Dernière intervention 1 juin 2020 - Modifié le 30 mai 2020 à 10:11
WebReveuse Messages postés 16 Date d'inscription vendredi 31 mai 2019 Statut Membre Dernière intervention 1 juin 2020 - 1 juin 2020 à 04:56
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
A voir également:

1 réponse

WebReveuse Messages postés 16 Date d'inscription vendredi 31 mai 2019 Statut Membre Dernière intervention 1 juin 2020
Modifié le 1 juin 2020 à 05:01
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
0