Node.js - Changer les permissions d'un joueur pour chaques catégories

Le problème exposé dans ce sujet a été résolu.

Salutations, je débute en js et j’essaye de faire un bot discord. Actuellement mon but est de changer la permission d’un joueur pour toutes les catégories. Pour cela j’utilise le code suivant :

    const category = message.guild.channels.cache.find(ch => ch.name === "Textuels");
    const channel = message.guild.channels.cache.find(ca => ca.name === 'General');
    category.overwritePermissions([
        {
           id: message.author.id,
           deny: ['VIEW_CHANNEL'],
        },
      ],)
      .then(() => {
        channel.setParent("751723015720403035", { lockPermissions: true})
      })
      .catch();

Néanmoins, je n’ai pas envie de faire cela pour toutes les catégories de mon serveur, notamment car il en possède une bonne vingtaine et que je compte en rajouter. Le fait est aussi que lorsque j’ai voulut simplement copier coller ce code pour changer le nom de la catégorie et du salon, j’ai eu une erreur.

Je voulais donc savoir si il y avait la possibilité d’appliquer le même procéder pour chaque catégorie, je vous remercie d’avance !

Bonjour,

https://discord.com/developers/docs/resources/channel#channel-object

À partir de message.guild.channels tu dois avoir un moyen de récupérer toutes les catégories sous la forme d’une liste.

Cela peut-être fait à partir des channel types (le type GUILD_CATEGORY) a pour ID 4.

Donc tu dois surement pouvoir faire quelque chose de la forme :

message.guild.channels.filter(ch => ch.type === 4)

Une fois que tu as cette liste (qui ne contient que des channels de type catégorie) tu peux faire une boucle for dessus.

Merci pour t’a réponse ! Néanmoins une erreur m’informe que message.guild.channels.cache.filter(ch => ch.type === 4) n’est pas une fonction. Alors j’ai voulus mettre .cache devant .find mais il m’affiche alors que category.overwritePermissions n’est pas une fonction.

Comme je l’ai dis, je débute en Java Script, je m’excuse donc d’avance si je fais des erreurs stupides.

const categories = message.guild.channels.cache.filter(ch => ch.type === 4) doit te donner une array de category.

Pour une array il n’y a pas de fonction overwritePermissions, tu veux utiliser cette fonction sur chacune des catégories contenue dans cette array :

categories.foreach(c => c.overwritePermissions(...))

+0 -0

J’ai essayer d’appliquer au mieux ce résonnement, mais rien à faire :

    if(message.content === prefix + "Test"){
        const category = message.guild.channels.cache.filter(ch => ch.type === 4)
        const channel = message.guild.channels.cache.filter(ch => ch.type === 0)
        category.foreach(c => {
            c.overwritePermissions([
                {
                    id: message.author.id,
                    deny: ['VIEW_CHANNEL'],
                }
            ])
            .then(() => {
                channel.setParent("751723015720403035", { lockPermissions: true})
            })
            .catch()
        })
    }

Désolé c’était pas le bon lien pour la doc javascript hier.

https://discord.js.org/#/docs/main/stable/class/CategoryChannel?scrollTo=setParent

Là ta variable channel contient un array de CategoryChannel, tu veux juste un CategoryChannel.

Pour chaque CategoryChannel tu veux modifier les permissions de la personne qui vient d’écrire un message.

Pour moi ça donne quelque chose de ce genre :

if(message.content === prefix + "Test") {
   /* On récupère les channels qui correspondent à des catégories */
   const categoriesChannel = message.guild.channels.cache.filter(ch => ch.type === "category")

   /* Pour chacun de ces channels on empêche l'utilisateur de le voir */
   categoriesChannels.foreach(c => {
      c.overwritePermissions([
        {
          id: message.author.id,
          deny: ['VIEW_CHANNEL'],
        }
      ])
   })
}

Je n’ai pas l’impression que tu aies besoin de changer le parent de ton channel si ?

Le code suivant fonctionne :

    if(message.content === prefix + "Test") {
        const categoriesChannels = message.guild.channels.cache.filter(ch => ch.type === "category")
        categoriesChannels.forEach(c => {
           c.overwritePermissions([
             {
               id: message.author.id,
               deny: ['VIEW_CHANNEL'],
             }
           ])
        })
    }

Merci à toi ! Néanmoins je voulais également que les salons ce synchronisent avec les catégories. C’est pour ça que j’utilisais setParent, car il me semblait que cela permettait au salon d’une catégorie de ce synchroniser avec.

+0 -0

Je pense que dans ce cas tu as juste besoin d’appeler la fonction lockPermissions sur tous tes channels.

Quelque chose comme :

message.guild.channels.cache.forEach(c => c.lockPermissions())

Le problème d’utiliser setParent ici c’est que tu va modifier le parent (je pense que cela correspond au channel dans lequel il est imbriqué et donc tu va perdre toute la "structure" de ton serveur.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte