首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >所有用户都可以使用Discord.js ban/kick命令。我怎么才能解决这个问题呢?

所有用户都可以使用Discord.js ban/kick命令。我怎么才能解决这个问题呢?
EN

Stack Overflow用户
提问于 2019-02-27 03:12:01
回答 7查看 90.3K关注 0票数 2

我在做自己的不和谐机器人,因为我不信任更大的机器人(Dyno,Hime,NosoBot等)。我的机器人已经差不多完成了。唯一的问题是我的代码允许所有成员使用这些命令。我只希望人们能够使用他们有权限的功能。代码可以工作,但我如何才能让它只允许有权限的人踢/禁?

代码语言:javascript
运行
复制
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");
        });
    }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2019-07-07 14:47:13

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

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

您的踢脚命令:

代码语言:javascript
运行
复制
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());
    }
}

您的Ban命令:

代码语言:javascript
运行
复制
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

票数 3
EN

Stack Overflow用户

发布于 2019-02-27 03:15:20

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

例如

代码语言:javascript
运行
复制
if(!message.member.roles.find("name", "Admin"))
   return;

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

所以代码应该是这样的

代码语言:javascript
运行
复制
 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");
        });
    }
});

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

票数 4
EN

Stack Overflow用户

发布于 2019-11-07 10:53:44

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

代码语言:javascript
运行
复制
    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");
        }
    })
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54892508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档