Bonjour,

Je rencontre un petit problème avec mon code.

Ce que je fais

J'essaye de créer mon propre bot discord assez flexible, le but est le suivant : je souhaiterai, quand il arrive sur un serveur, qu'il exécute une certaine analyse des messages dans un certain channel stocker, ici dans roleChannel , puis qu'il envoie un message d'information dans le channel stocker par roleLogChannel. Pour une logistique et un rangement irréprochable, ces deux channels doivent être regrouper dans le CaterogryChannel stocker dans roleCategory.

L'idée est alors, lorsque le bot déclenche l'event ready, de vérifier si le serveur où il se trouve possède cette catégorie (si non, il faut la créer) et s'il possède les 2 channels requis dans cette catégorie.

// Déclaration des var contenant les channels visé
    var roleCategory = guild.channels.cache.find(channel => channel.name === nameCatR && channel.type === 'category');
    var roleChannel = undefined;
    var roleLogChannel = undefined;
    if (roleCategory !== undefined) {
      // Si la catégorié Rôle existe, on vérifie l'existance des 2 sous channels text requis
      roleChannel = roleCategory.children.find(channel => channel.name === nameR && channel.type === 'text' && channel.parent === roleCategory);
      roleLogChannel = roleCategory.children.find(channel => channel.name === nameLogR && channel.type === 'text' && channel.parent === roleCategory);
    }
    else {
      // On crée la catégorie Rôle
      guild.channels.create(nameCatR, {type: 'category'}).then(console.log("ok")).catch(console.log("--"));
      roleCategory = guild.channels.cache.find(channel => channel.name === nameCatR && channel.type === 'category');
      console.log("CategoryChannel " + nameCatR + " create -");
    }
    // On posistionne la catégorie Rôle en 1er
    roleCategory.setPosition(0);

Ce que je veux

Je souhaiterai que lorsque le serveur ne possède pas une catégorie nommé nameCatR, il la crée. Puis après cela, il met à jour la variable roleCategory qui doit stocker le CategoryChannel en question. Pour finir, il positionne cette catégorie tout en haut du serveur (position 0).

Ce que j'obtiens

J'obtiens la 1er fois une erreur au lancement de mon bot. Si le roleCategory n'existe pas, il le crée bien, mais n'actualise pas la variable roleCategory qui doit stocker ce CategoryChannel. Je vois cela par le fait que le code plante une fois arriver au setPosition, avec une erreur me disant qu'on ne peut pas set une position à un objet de type undefined, ce qui veut dire qu'il n'a pas actualisé ma variable. La variable vaut bien undefined au début du programme si la catégorie n'existe pas sur le serveur, cependant je ne comprends pas pourquoi la variable ne se met pas à jour après avoir créer la catégorie sachant que la ligne de code qui suit est sensé redéfinir la variable roleCategory... :/

A noter, si je le relance une deuxième fois mon code (avec la catégorie qui s'est crée juste avant le plantage), mon set position fonctionne est met ma catégorie en 1er position. Ce qui me rend fou c'est que la ligne de code qui est sensé mettre a jour ma variable est la même que lorsque de la définie la toute première fois.
PS : la 1er fois que j'ai lancé mon code, le "then" et "catch" se sont tous les deux déclenchés, comme si ma ligne create s'été exécutée 2 fois, le then s'exécute, puis le catch, dans la console j'ai "ok", puis "--". Je suis loin d'être câlé en JS, mais la logique qui m'anime me tend à dire qu'avec une seule exécution sans boucle, soit le "then" est exécuté, soit le "catch", mas pas les deux en une fois ?

EDIT : C'est même pire que ce que je pensais, si je mets une boucle qui m'affiche dans la console le listing des channels, juste après que le catéorie soit créée, la console m'affiche pas le channel totu jsute créé, si je le relance une deuxième fois après création, là il me l'affiche bien. Ca veut dire que la première fois, la variable channels n'est elle même pas mis à jour alors qu'on lui applique un create().

Aucune réponse