Discord.js v13 如何防止 mod 命令在 mod 上工作?

Discord.js v13 How to prevent mod commands from working on mods?

所以我想为我的 Discord 机器人发出一个静音命令。它应该使提到的用户静音,直到他们通过另一个命令 (WIP) 取消静音,另外应该有一个选项来给出原因。如果没有提供原因,它只会说原因:none。我已经设法将命令访问限制为 mod 角色(尽管在下面的代码中它会检查 MODERATE_MEMBERS 标志,因为在我看来这是更好的方法)并使其成为 return 所有必需的错误消息,例如“我无法使该用户静音”等。 这是我的代码:

const { Permissions } = require('discord.js');

module.exports = {
    name: 'mute',
    description: "Mutes a user for an unlimited amount of time.",
    execute(message, args)
    {
        const target = message.mentions.members.first();
        let muteReason = args.join(" ").slice(22);

        if(message.member.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS))
        {
            if(target)
            {
                if(target.id == '943093289031176203')
                {
                    message.reply("I can't mute myself.")
                }
                else if(message.member == target)
                {
                    message.reply("You can't mute yourself!")
                }
                else if(target.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS))
                {
                    if(!muteReason)
                    {
                        muteReason = "None"
                    }
                    let muteRole = message.guild.roles.cache.find(role => role.name === "muted");
                    let memberTarget = message.guild.members.cache.get(target.id);

                    memberTarget.roles.add(muteRole.id);
                    message.reply(`<@${memberTarget.user.id}> has been muted. Rason: ` + muteReason);
                }
                else
                {
                    message.reply("I can't mute that user.")
                }
            
            }
            else
            {
                message.reply("You have to mention a valid member of this server.")
            }
        }
        else
        {
            message.reply("You can't use that.")
        }
       
    }
}

我遇到的问题是 moderators 可以使其他 moderators 静音,这不应该发生。所以基本上我需要一个解决方案,使该命令不适用于具有 mod 角色的其他人或不适用于具有某些权限的人的命令(最好是第二个,因为它会更有用)。

您可以检查指定用户的版主权限,然后仅当用户没有权限时才静音。这样它就不会让模组静音。

//...

  let memberTarget = message.guild.members.cache.get(target.id);

  if (memberTarget.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS)) {
    message.reply(`<@${memberTarget.user.id}> is a Moderator. You cant' mute them.`);
  } else {
    memberTarget.roles.add(muteRole.id);
    message.reply(`<@${memberTarget.user.id}> has been muted. Reason: ` + muteReason);
  }

//...