用户登录
用户注册

分享至

用户角色层次结构

  • 作者: 陌子颜丶
  • 来源: 51数据库
  • 2022-10-21

问题描述

由于像这样 https://media.discordapp.net/attachments/223867697312694272/723382952330919976/image0.png

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

Instead my bot allows the user to add the role above them to themselves or other users as long as they have the required permissions 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 属性,表示其在角色管理器中的位置.

The Role class in Discord.js has a position property which represents its position in the role manager.

GuildMember 类有一个名为 roles,它的类型是 GuildMemberRoleManager.GuildMemberRoleManager 类有一个名为 highest,指向成员拥有的排名最高的角色.

The GuildMember class has a property named roles, which is of type GuildMemberRoleManager. The GuildMemberRoleManager class has a property named highest, which points to the highest ranked role that the member has.

所以.为了确保机器人不会在层次结构中为成员提供比他们更高的角色,您可以将他们想要的角色的 position 与 position 进行比较他们目前的最高职位.

So. To make sure that the bot doesn't give a member a role that is higher than them in the hierarchy, you can compare the position of the role they want with the position of their current highest role.

软件
前端设计
程序设计
Java相关