用户角色层次结构



由于这样的角色层次结构,如何让我的机器人不向用户授予角色或禁止他们之上的成员 https://media.discordapp.net/attachments/223867697312694272/723382952330919976/image0.png

相反,我的机器人允许用户将上面的角色添加到自己或其他用户,只要他们具有所需的权限 https://cdn.discordapp.com/attachments/223867697312694272/723382993384767550/image0.png

我的代码:

const Discord = require("discord.js");
module.exports.run = async (bot, message, args) => {
if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send("You don't have permissions to use this!");
let xdemb = new Discord.RichEmbed()
.setColor("RANDOM")
.setTitle("Role Command")
.addField("Description:", `Adds/removes a role to/from a member`, true)
.addField("Usage:", "`?role` [user] roleName", true)
.addField("Example:" ,"`?role` @user goodrole", true)
let member = message.mentions.members.first();
if(!member) return message.channel.send(xdemb)
let role = args.slice(2).join(" ")
if(!role) return message.channel.send("Provide a role to assign")
let gRole = message.guild.roles.find(r => r.name.toLowerCase() === role.toLowerCase())
if(!gRole) return message.channel.send(`There's no role with the name `${role}``)

if(member.roles.has(gRole.id)) {
member.removeRole(gRole.id)
message.channel.send(`Removed role `${role}` from **${member.user.username}**`)
} else {
member.addRole(gRole.id)
message.channel.send(`Added role `${role}` to **${member.user.username}**`)
}
}
module.exports.help = {
name: "role"
}

Discord.js 中的Role类有一个position属性,表示它在角色管理器中的位置。

GuildMember类有一个名为roles的属性,其类型为GuildMemberRoleManagerGuildMemberRoleManager类有一个名为highest的属性,该属性指向成员具有的最高排名角色。

所以。若要确保机器人不会为成员提供在层次结构中高于其的角色,可以将他们所需角色的position与其当前最高角色的position进行比较。

最低角色 (@everyone( 位于位置 0。

要比较角色,请尝试以下操作:

// define member as a GuildMember and role as a Role
if (member.roles.highest.position < role.position) return message.channel.send('You do not have permission to add this role as the role is above your highest role.');

希望这有帮助。

最新更新