我正在创建一个机器人命令,这样当您键入!setup
时它将设置整个服务器(创建通道和角色等)。我已经设置了它来创建角色和频道,但是有些频道只能输入特定的角色,而其他角色只能读取该频道。我不知道如何为某些角色设置权限覆盖。
我已经查看了Discord.js文档,但并没有太大帮助。我收到一个错误supplied parameter was neither a user nor a role
,但我不知道如何获取角色ID。
message.guild.createRole({
name: 'Admin',
color: '#2494ad',
permissions: ['ADMINISTRATOR', 'VIEW_AUDIT_LOG', 'MANAGE_GUILD', 'MANAGE_CHANNELS', 'SEND_TTS_MESSAGES', 'CREATE_INSTANT_INVITE', 'KICK_MEMBERS', 'BAN_MEMBERS', 'ADD_REACTIONS', 'PRIORITY_SPEAKER', 'READ_MESSAGES', 'SEND_MESSAGES', 'MANAGE_MESSAGES', 'EMBED_LINKS', 'ATTACH_FILES', 'READ_MESSAGE_HISTORY', 'MENTION_EVERYONE', 'USE_EXTERNAL_EMOJIS', 'CONNECT', 'SPEAK', 'MUTE_MEMBERS', 'DEAFEN_MEMBERS', 'MOVE_MEMBERS', 'USE_VAD', 'CHANGE_NICKNAME', 'MANAGE_NICKNAMES', 'MANAGE_ROLES', 'MANAGE_WEBHOOKS', 'MANAGE_EMOJIS']
});
message.guild.createRole({
name: 'Requesting Role',
color: '#1bb738',
permissions: ['READ_MESSAGES', 'SEND_MESSAGES', 'READ_MESSAGE_HISTORY',]
});
//Categories and Channels
message.guild.createChannel('clan-communications', {
type: 'category',
permissionOverwrites: [{
id:'25311096',
deny: ['SEND_MESSAGES']
}]
});
//Permissions
message.channel.overwritePermissions('25311096', {
SEND_MESSAGES: false
});
break;
我希望角色具有整个服务器的基本权限。但是某些角色会覆盖不同的渠道。而是说supplied parameter was neither a user nor a role.
答案 0 :(得分:0)
首先,欢迎您使用Stack Overflow。希望我们能为您提供帮助。
让我们逐步解决问题,以达到您想要的结果。
创建角色时,应声明一个变量来存储它们。这样,您就可以使用客户端稍后创建的内容。由于Guild.createRole()
返回了promise,因此我们可以将完成的结果保存到变量中。
请注意,关键字await
必须放在异步上下文中(在async function内)。
const vip = await message.guild.createRole('VIP', { ... });
然后,当您需要使用该角色时,可以引用该变量。
await message.guild.createChannel('VIPs Only', {
type: 'category',
permissionOverwrites: [
{
id: vip.id,
allow: ['READ_MESSAGES']
}, {
id: message.guild.defaultRole.id, // @everyone role
deny: ['READ_MESSAGES']
}
]
});
如果角色已经存在,则可以从Collection返回的角色Guild.roles
中检索它。
const testRole = message.guild.roles.get('IDhere');
const adminRole = message.guild.roles.find(r => r.name === 'Admin');
其他简单的改进。
catch()
方法附加到每个promise(更好地用于单个处理),或将异步代码包装在try...catch
语句中。ADMINISTRATOR
权限会自动授予所有其他权限(并允许用户绕过特定于通道的权限)。因此,无需列出任何其他权限,也无需更改任何通道中角色的权限覆盖。Requesting Role
角色的权限数组中,您有一个逗号。