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);
}
//...
所以我想为我的 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);
}
//...