由于类似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"
}
答案 0 :(得分:0)
Discord.js中的Role
类具有一个position
属性,该属性表示其在角色管理器中的位置。
GuildMember
类具有一个名为roles
的属性,该属性的类型为GuildMemberRoleManager
。 GuildMemberRoleManager
类具有一个名为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.');
希望这会有所帮助。