创建并分配角色 Discord.js

Posted

技术标签:

【中文标题】创建并分配角色 Discord.js【英文标题】:Create and assign role Discord.js 【发布时间】:2021-06-24 00:49:46 【问题描述】:

我正在使用 discord.js 创建一个 Discord 机器人,但我不知道如何创建角色并自动分配它。

例如,客户写道:?insc NAME @pseudo1 @pseudo2 @pseudo3

此命令创建角色NAME,然后创建一个具有channelVoice 和channelText 的类别,只有NAME 可以访问。

目前,这是我的代码。我已经成功地使用 channelVoice 和 channelText 创建了我的类别,而无需私人访问。

    module.exports = 
    name: 'insc',
    description: 'Inscription des equipe',
    execute(message, args, user) 
        const  PREFIX  = require('../config.js');
        const name = message.content.replace(`$PREFIX` + this.name, '')
        message.guild.roles.create(
            data: 
                name: name,
            ,
        )

        message.guild.channels.create(name, 
            type: 'category',
            permissionOverwrites: [
                
                    id: message.guild.id,
                    deny: ['VIEW_CHANNEL'],
                    // allow: ['VIEW_CHANNEL'], //autorise @everyone à voir ce channel
                ]
        ).then(cat => 
            message.guild.channels.create(name, 
                type: 'text',
                parent: cat,
                permissionOverwrites: [
                    
                        id: message.guild.id,
                        deny: ['VIEW_CHANNEL'],
                    ]
            )
            message.guild.channels.create(name, 
                type: 'voice',
                parent: cat,
                permissionOverwrites: [
                    
                        id: message.guild.id,
                        deny: ['VIEW_CHANNEL'],
                    ]
            )
        )

        return message.channel.send(`L'inscription à bien été effetué pour l'équipe $name`);

        // return message.channel.send(`$name existe déjà`)

    

【问题讨论】:

【参考方案1】:

roles.create 返回一个承诺,因此您需要先解决它以获取创建角色的 ID。您可以在 permissionOverwrites 中将此 ID 用于您的类别和频道。

当您使用channels.create 创建频道时,您可以添加permissionOverwrites 的数组。通过这种方式,您可以告诉 Discord 您希望允许或拒绝谁查看频道。在您的示例中,您尝试拒绝所有人的 VIEW_CHANNEL 权限,这是正确的,您只需在该数组中添加另一个具有新角色 ID 的对象。

在我的示例中,我创建了一个 permissionOverwrites 数组,因此我只需编写一次并将其与类别、文本通道和语音通道一起使用。

另外,如果您想将角色添加到提到的成员,您可以遍历它们并一一添加角色。

查看以下工作示例:

module.exports = 
  name: 'insc',
  description: 'Inscription des equipe',
  async execute(message, args, user) 
    // you already receive the args, the first one is the team name
    const name = args[0];

    // create role
    const role = await message.guild.roles.create( data:  name  );
    const permissionOverwrites = [
      // deny access to everyone
       id: message.guild.id, deny: ['VIEW_CHANNEL'] ,
      // use the role id to allow users with the role to access the channel
       id: role.id, allow: ['VIEW_CHANNEL'] ,
    ];

    // add role to mentioned members if there are any
    message.mentions.members.each((member) => 
      member.roles.add(role.id);
    );

    // create a category and grab the created channel
    const category = await message.guild.channels.create(name, 
      type: 'category',
      permissionOverwrites,
    );

    message.guild.channels.create(name, 
      type: 'text',
      parent: category,
      permissionOverwrites,
    );

    message.guild.channels.create(name, 
      type: 'voice',
      parent: category,
      permissionOverwrites,
    );

    return message.channel.send(`L'inscription à bien été effetué pour l'équipe $name`);
  ,
;

【讨论】:

何,谢谢各位。这是一个成功的。它从我的脚上取下了一根大刺。谢谢x1000 太好了,很高兴能帮上忙

以上是关于创建并分配角色 Discord.js的主要内容,如果未能解决你的问题,请参考以下文章

Vcenter server 5.5添加用户角色及分配权限

Vcenter server 5.5添加用户角色及分配权限

教程创建RBAC角色组并分配权限后,EMC中本应有权限编辑的字段被锁定

在 Oracle 中找不到分配给已创建角色的权限

oracle 中如何创建一个角色并把角色赋予指定账户

RABC权限控制(页面操作角色,权限和进行分配)