繁体   English   中英

创建并分配角色 Discord.js

[英]Create and assign role Discord.js

我正在使用 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à`)

    }
}

roles.create返回一个 promise 所以你需要先解决它来获取创建的角色的 ID。 您可以在您的permissionOverwrites中为您的类别和频道使用此 ID。

当您使用channels.create创建频道时,您可以添加一个permissionOverwrites数组。 通过这种方式,您可以告诉 Discord 您要允许或拒绝谁查看频道。 在您的示例中,您尝试拒绝每个人的VIEW_CHANNEL权限,这是正确的,您只需在该数组中添加另一个 object 并使用新角色的 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}`);
  },
};

在此处输入图像描述 在此处输入图像描述

暂无
暂无

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

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