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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/54892508/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 05:15:02  来源:igfitidea点击:

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

javascriptdiscorddiscord.js

提问by Derek Haber

I'm making a private Discord API because I don't trust the bigger ones (Dyno, Hime, NosoBot, etc.) And my bot is pretty much done. The only problem is that my code allows all members to use these commands. I want everyone to have access to every command besides these two. The code works, but how can I make it allow only people with permission to kick/ban?

我正在制作一个私有的 Discord API,因为我不信任更大的 API(Dyno、Hime、NosoBot 等)而且我的机器人已经完成了。唯一的问题是我的代码允许所有成员使用这些命令。我希望每个人都可以访问除这两个命令之外的所有命令。代码有效,但我怎样才能让它只允许有权限的人踢/禁止?

    if (message.content.startsWith("$kick")) {
        // 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")) {
        // 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");
        });
    }
});

回答by Ghanima

Make a role in the server, and check for the role in your code

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

For example

例如

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

Would exit the method if the user does not have the role

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

So the code would look something like this

所以代码看起来像这样

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

A nicer approach would be making a function that returns whether the user has the permission or not and using it in your code

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

回答by Maxim777YT

Do:

做:

if (message.member.hasPermission("ADMINISTRATOR") {
  // Your code that kicks/bans.
  // All members with the role that has administrator 
  // permission will be able to kick/ban 
}

回答by A person

I used this for the roles permission:

我将其用于角色权限:

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

Maybe this might help you, i don't know.

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

回答by Mathou_90

Hey i have something better for you

嘿,我有更好的东西给你

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

Just delete BAN and replace by KICK

只需删除 BAN 并替换为 KICK

回答by Mathou_90

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

}

}

回答by JED

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

如果 (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");
        }
    })
}