繁体   English   中英

Discord.js ban/kick 命令可供所有用户使用。 我怎样才能解决这个问题?

[英]Discord.js ban/kick commands available to all users. How can I fix this?

我正在制作自己的 Discord Bot,因为我不信任较大的(Dyno、Hime、NosoBot 等)并且我的机器人已经完成了。 唯一的问题是我的代码允许所有成员使用这些命令。 我只希望人们能够使用他们有权使用的功能。 代码有效,但我怎样才能让它只允许有权限的人踢/禁止?

if (msg.content.startsWith("$kick ")) {
    if (msg.mentions.members.first()) {
        msg.mentions.members.first.kick().then((member) => {
            msg.channel.send(":wave: " + member.displayName + " has been successfully kicked :point_right: ");
        }).catch(() => {
            msg.channel.send("I do not have permissions to do this");
        });
    }
}else if (msg.content.startsWith("$ban ")) {
   if (!message.member.hasPermission("MANAGE_MESSAGES")) return;
    if (msg.mentions.members.first()) {
        msg.mentions.members.first.ban().then((member) => {
            msg.channel.send(":wave: " + member.displayName + " has been successfully banned :point_right: ");
        }).catch(() => {
            msg.channel.send("I do not have permissions to do this");
        });
    }
}

在服务器中创建一个角色,并在您的代码中检查该角色

例如

if(!message.member.roles.find("name", "Admin"))
   return;

如果用户没有角色,将退出该方法

所以代码看起来像这样

 if (message.content.startsWith("$kick")) {

    if (!message.member.roles.find("name", "Admin"))
        return;
    // Easy way to get member object though mentions.
    var member = message.mentions.members.first();
    // Kick
    member.kick().then((member) => {
        // Successmessage
        message.channel.send(":wave: " + member.displayName + " has been successfully kicked :point_right: ");
    }).catch(() => {
        // Failmessage
        message.channel.send("Access Denied");
    });
}
});
client.on("message", (message) => {
    if (message.content.startsWith("$ban")) {

        if (!message.member.roles.find("name", "Admin"))
            return;

        // Easy way to get member object though mentions.
        var member = message.mentions.members.first();
        // ban
        member.ban().then((member) => {
            // Successmessage
            message.channel.send(":wave: " + member.displayName + " has been successfully banned https://gfycat.com/playfulfittingcaribou :point_right: ");
        }).catch(() => {
            // Failmessage
            message.channel.send("Access Denied");
        });
    }
});

一个更好的方法是创建一个函数来返回用户是否有权限并在你的代码中使用它

“KICK_MEMBERS”权限告诉您他们是否有权踢成员,因此得名。

“BAN_MEMBERS”权限告诉您他们是否有权禁止成员,因此得名。

你的踢球命令:

if (msg.member.hasPermission("KICK_MEMBERS")) {
    if (msg.members.mentions.first()) {
        try {
            msg.members.mentions.first().kick();
        } catch {
            msg.reply("I do not have permissions to kick " + msg.members.mentions.first());
        }
    } else {
        msg.reply("You do not have permissions to kick " + msg.members.mentions.first());
    }
}

您的禁令命令:

if (msg.member.hasPermission("BAN_MEMBERS")) {
    if (msg.members.mentions.first()) {
        try {
            msg.members.mentions.first().ban();
        } catch {
            msg.reply("I do not have permissions to ban" + msg.members.mentions.first());
        }
    } else {
        msg.reply("You do not have permissions to ban" + msg.members.mentions.first());
    }
}

trycatch的原因确保如果机器人没有踢或禁止该用户的权限,它不会导致错误。

另一个注意事项:

您不必创建另一个bot.on('message')事件。 而是使用elseif

if (message.content.startsWith( ${prefix}kick )) {

    let member = message.mentions.members.first();
    member.kick().then((member) => {
        message.channel.send(`:wave: ${member.displayName} has been kicked`);
    }).catch(() => {
        if (!message.member.hasPermission(['KICK_MEMBERS', 'ADMINISTRATOR'])) {
            message.reply("You cannot kick members");
        } else if (member.hasPermission(['KICK_MEMBERS', 'BAN_MEMBERS', 'ADMINISTRATOR'])) {
            message.reply("You cannont kick this member");
        }
    })
}
if (message.content.startsWith(`${prefix}ban`)) {

    let member = message.mentions.members.first();
    member.ban().then((member) => {
        message.channel.send(`:wave: ${member.displayName} has been kicked`);
    }).catch(() => {
        if (!message.member.hasPermission(['BAN_MEMBERS', 'ADMINISTRATOR'])) {
            message.reply("You cannot ban members");
        } else if (member.hasPermission(['KICK_MEMBERS', 'BAN_MEMBERS', 'ADMINISTRATOR'])) {
            message.reply("You cannont ban this member");
        }
    })
}

我将其用于角色权限:

if(message.member.roles.find(r => r.name === 'name of role')){
            //Enter command coding here
            }else{
            return message.channel.send('Enter Speech here')
            }
            break;

也许这对你有帮助,我不知道。

嘿,我有更好的东西给你

const Discord = require('discord.js');

if (message.content.startsWith(${prefix}BAN)) => {
    if (!message.guild.member(message.author).hasPermission('BAN_MEMBERS')) { return message.channel.send('You do not have the permission for ban users"  !'); }

if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) { return message.channel.send('I don\'t have the permission for ban users" !'); }

if (message.mentions.users.size === 0) { return message.channel.send('You need to ping a user !'); }
let banMember = message.guild.member(message.mentions.users.first());
if (!banMember) { return message.channel.send('User not found!'); }

        banMember.ban().then((member) => {
            message.channel.send(member.displayName + " has left the server")
            message.channel.send(member.displayName + " has been successfully banned by " + message.author);
        })
    }

只需删除 BAN 并替换为 KICK

    if (message.content.startWith(`${prefix}ban`)){
let buser = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
if (!buser) return message.channel.send("Please provid a user to ban")
let reason = args.join(" ").slice(22)
if (!reason) return message.channel.send("Please provide a reason")
if(!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send("You don't have acces to this command")
if (buser.hasPermission("BAN_MEMBERS")) return message.channel.send("This user has the perm ban user")
let embed = new Discord.RichEmbed()
buser.ban()
.setAuthor("Ban")
.setDescription(`The user ${buser} has been ban for: ${reason}\n by the admin ${message.author.tag}`)
bot.channels.get("an channel id").send(embed);

}

if (msg.content.startsWith("$kick ")) {
if (msg.author.hasPermission(`BANNING_MEMBERS`) {
    if (msg.mentions.members.first()) {
        msg.mentions.members.first.kick().then((member) => {
            msg.channel.send(":wave: " + member.displayName + " has been successfully kicked :point_right: ");
        }).catch(() => {
            msg.channel.send("I do not have permissions to do this");
        });
    }
}else if (msg.content.startsWith("$ban ")) {
   if (!message.member.hasPermission("MANAGE_MESSAGES")) return;
    if (msg.mentions.members.first()) {
        msg.mentions.members.first.ban().then((member) => {
            msg.channel.send(":wave: " + member.displayName + " has been successfully banned :point_right: ");
        }).catch(() => {
            msg.channel.send("I do not have permissions to do this");
        });
    }
    } else {
msg.reply(`you can't ban members ask owner for admin`)
};

}

我建议您使用 prettierc(如果您使用 vs 代码进行编码,例如内部人员)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM