[英]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.