【问题标题】:User role-hierarchy用户角色层次结构
【发布时间】:2020-10-09 06:51:50
【问题描述】:

如何让我的机器人不给用户一个角色或禁止他们上面的成员,因为像这样的角色层次结构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"
}

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    最低角色 (@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.');
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      所以。为确保机器人不会在层次结构中为成员分配比他们更高的角色,您可以将他们想要的角色的 position 与他们当前最高角色的 position 进行比较。

      【讨论】:

      • 正确。我知道,但问题是,我不知道该怎么做。你能帮帮我吗?
      • @Maniac if gRole.position &gt; member.roles.highest.position,那么你就知道请求的角色太高了。
      猜你喜欢
      • 2010-11-19
      • 2012-06-16
      • 2017-12-27
      • 2018-05-31
      • 2011-11-03
      • 2020-03-17
      • 2013-11-18
      • 2016-01-03
      • 2014-06-17
      相关资源
      最近更新 更多