【问题标题】:Discord.js Ban User Permissions CommandDiscord.js 禁止用户权限命令
【发布时间】:2021-01-11 07:28:55
【问题描述】:

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

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);

  }
};

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    你可以用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(...);
    

    【讨论】:

    • 有没有办法给它添加第二个角色?就像如果我有一个名为受保护的角色?谢谢!
    • 只需将targetRole 替换为您想要比较职位的任何角色。
    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 2021-08-22
    • 2021-07-27
    • 2021-06-01
    • 2020-11-18
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多