Discord.js禁止用户权限命令



因此,每当我的服务器上的版主使用ban命令时,他们都可以禁止版主和管理员。有没有办法用权限解决这个问题?基本上,我希望当主持人使用ban命令时,他们不能禁止管理员。有些人告诉我,解决方案是将角色下移,但我希望将角色保持在我的管理员角色之上。这是我的禁令代码:

const { MODLOGCHANNELNAME, MUTEROLE, MAINROLE, PREFIX, BOTNAME} = require("../config.json");
var ms = require('ms');
var Discord = require('discord.js');
module.exports ={
name: 'ban',
aliases: ['b',],//'@Knife Guard 2.0'],
description: 'Bans a user from this server',
usage: 'ban [mention] [reason]',
category: "moderation",
execute: async (message, args, client) => {

const user = message.mentions.users.first();
if(!message.member.hasPermission(["BAN_MEMBERS", "ADMINISTRATOR"])) return message.channel.send("You do not have permission to perform this command!");
let banMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
if(!banMember) return message.channel.send("Please provide a user to ban!");
var reason = args.splice(1).join(' ');
if(!reason) return message.reply('You need to give a reason!'); 
if(!message.guild.me.hasPermission(["BAN_MEMBERS", "ADMINISTRATOR"])) return message.channel.send("I dont have permission to perform this command");
//message.delete();
var bot_name = BOTNAME;
let dmEmbed = new Discord.MessageEmbed()
.setColor('#FF0000')
.setTitle('You Are Banned')
.addField('Reason:', reason, true)
// eslint-disable-next-line no-undef
.setFooter(bot_name)
.setTimestamp();
message.channel.send(`**${banMember.user.tag}** has been banned`);//.then(m => m.delete(5000));
banMember.send(dmEmbed).then(() => //dms the user they r banned
// banMember.send(`Hello, you have been banned from ${message.guild.name} for: ${reason}`).then(() => //dms the user they r banned
message.guild.member(banMember).ban(banMember, {reason: reason, days: 1})); //once DM done, Ban member

// eslint-disable-next-line no-undef
var banEmbed = new Discord.MessageEmbed()
.setColor('#FF0000')
.setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL)
.addField('Moderation:', "Ban")
.addField("Moderated On:", `${user.username} (${user.id})`)
.addField("Moderator", message.author.username)
.addField("Reason:", reason)
.setTimestamp()
// eslint-disable-next-line no-undef
.setFooter(bot_name, message.author.avatarURL());

let modlogchannel = (`${MODLOGCHANNELNAME}`);
var channel = message.guild.channels.cache.find(c => c.name === modlogchannel); 
channel.send(banEmbed);
}
};

您可以使用Role.comparePositionsTo()比较两个成员的最高角色

如果此角色的位置较低(其他角色的位置较高(,则返回负数;如果此角色较高(其他角色较低(,则为正数;如果相等,则返回0

// message author's highest role
const authorRole = message.member.roles.highest;
// target's highest role
const targetRole = banMember.roles.highest;
// if targetRole's position is higher or equal to authorRole's
if (targetRole.comparePositionsTo(authorRole) <= 0)
return message.channel.send(...);

最新更新