用户角色层次结构

时间:2020-06-19 04:09:44

标签: javascript discord.js

由于类似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"
}

2 个答案:

答案 0 :(得分:0)

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

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

所以。为确保漫游器不会赋予成员更高的角色,可以将其所需角色的position与当前最高角色的position进行比较。

答案 1 :(得分:0)

最低角色(每个人)在位置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.');

希望这会有所帮助。