Как установить Discord.js разрешения для команд с косой чертой версии 13?

#javascript #discord #discord.js

#javascript #Discord #discord.js

Вопрос:

Я следую Discord.js руководство по созданию команд косой черты для моего бота, но я застрял на этом этапе:
https://discordjs.guide/interactions/slash-command-permissions.html#user-permissions

Есть две вещи, которые я не могу понять:

  • где я должен написать этот блок кода, на который я ссылался выше,
  • как я должен находить идентификатор каждой команды

Я создаю свои команды, используя SlashCommandBuilder и deploy-commands.js сценарий, как описано здесь:
https://discordjs.guide/creating-your-bot/creating-commands.html#command-deployment-script
и здесь:
https://discordjs.guide/interactions/registering-slash-commands.html#guild-commands

Если вы можете помочь мне в любой из этих двух вещей, это было бы здорово!
Спасибо!

Комментарии:

1. Не могли бы вы предоставить свой текущий код? (по крайней мере, некоторые из них?)

2. Конечно, здесь: github.com/OIIOIIOI/rd72-bot

3. Я предполагаю, что ваш репозиторий является частным, поэтому у меня нет к нему доступа. Если вы хотите, вы можете нажать на мой профиль, перейти в мой профиль на github и добавить меня в репозиторий. Чем я посмотрю

4. Мой плохой, я изменил его на общедоступный

Ответ №1:

Я изучил коды @discordjs/builders и @discordjs/rest , и нет способа установить пользовательские разрешения для этих пакетов. Что вы можете сделать, так это создать команды косой черты с Discord.js пакетом. При их создании в Discord.js пакете идентификатор команды косой черты будет возвращен в заполненном виде Promise . С помощью этого идентификатора вы можете установить разрешения для команды. Единственная проблема при выполнении этого способа заключается в том, что может потребоваться некоторое время, прежде чем команды косой черты снова заработают. Вот пример:

 const { Client } = require('discord.js');

const client = new Client({intents: ['Your Intents here']});

client.once('ready', () => {
   client.application.commands.create({
      name: 'your_command',
      description: "Your command's description"
   }).then(id => {
      client.application.commands.set({command: id, permissions: [
           id: 'some_user_id',
           type: 'USER',
           permission: false // Can not use the slash command
      ]}).catch(console.log);
   });
});

client.login('Your token here');
 

Я думал, что есть другой способ сделать это, но я не совсем уверен. Если я прав, вы также можете получить все команды после обновления их с @discordjs/builders @discordjs/rest помощью пакетов и . После того, как вы их извлекли, они Promise вернут a Collection , как только он будет заполнен. В Collection будут все идентификаторы всех команд косой черты, которые вы можете использовать для установки разрешений. Итак, если эта теория работает, это будет примером:

 const { Client } = require('discord.js');

const client = new Client({intents: ['Your Intents here']});

client.once('ready', () => {
    // Your refresh code here
    client.application.commands.fetch().then(collection => {
        collection.forEach(command => {
            if(command.name === `The specified command name`){
                 client.application.commands.permissions.set({command: command.id, permissions: [
                     {
                         id: 'some_user_id',
                         type: 'USER',
                         permission: false // Can not use the slash command
                     }
                 ]}).catch(console.log);
            }
        });
    }).catch(console.log);
});

client.login('Your token here');
 

Комментарии:

1. Выполнение цикла forEach в событии ready действительно работает! Я соответствующим образом обновил репозиторий. Спасибо!