繁体   English   中英

如何设置 Discord.js v13 斜杠命令权限?

[英]How to set Discord.js v13 slash commands permissions?

我正在按照 Discord.js 指南为我的机器人创建斜杠命令,但我被困在这一点上:
https://discordjs.guide/interactions/slash-command-permissions.html#user-permissions

两件事我无法弄清楚

  • 我应该在哪里写我上面链接的这段代码,
  • 我应该如何找到每个命令的 ID

我正在使用SlashCommandBuilderdeploy-commands.js脚本创建我的命令,如下所述:
https://discordjs.guide/creating-your-bot/creating-commands.html#command-deployment-script
和这里:
https://discordjs.guide/interactions/registering-slash-commands.html#guild-commands

如果你能在这两件事中的任何一件上帮助我,那就太好了!
谢谢!

我查看了@discordjs/builders@discordjs/rest的代码,无法使用这些包设置自定义权限。 您可以做的是使用Discord.js package 创建斜杠命令。 通过在Discord.js package 中创建它们,斜杠命令的 id 将在完整的Promise中返回。 使用此 ID,您可以设置命令的权限。 这样做的唯一问题是斜杠命令可能需要一段时间才能再次工作。 这是一个例子:

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将在完成后返回一个Collection Collection中将是所有斜杠命令的所有 ID,您可以使用它们来设置权限。 所以如果这个理论有效,这将是一个例子:

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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM