【问题标题】:How can I disable kicking members who have a higher role?如何禁用踢出具有更高角色的成员?
【发布时间】:2021-07-08 07:31:31
【问题描述】:

所以我目前正在创建kick command,但遇到了问题:

所有成员都可以踢其他成员,即使他们具有更高的角色,例如"normal" 用户可以踢adminmod。但我希望机器人返回 message 之类的

“你不能踢同等或更高角色的成员!”

这是我当前的代码:

const { MessageEmbed, User } = require('discord.js');
const config = require('../../configs/config.json');

module.exports = {
    config: {
        name: "kick",
    },
    run: async (client, message, args) => {
        if (!message.member.hasPermission('KICK_MEMBERS', 'ADMINISTRATOR')) {
            return message.channel.send({
                embed: {
                    title: 'You are unable to kick members',
                    color: config.embedcolor
                }
            })
        }
        if (!args[0]) {
            return message.channel.send({
                embed: {
                    title: 'PLease mention a user',
                    color: config.embedcolor
                }
            })
        }
        if (message.member.permissions.has("MANAGE-MESSAGES", "ADMINISTRATOR"))
            return message.channel.send({
                embed: {
                    title: "I can't kick staff members!",
                    color: config.embedcolor
                }
            })

        const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]);

        try {
            await member.kick();
            await message.channel.send({
                embed: {
                    title: `${member} has been kicked!`,
                    color: config.embedcolor
                }
            })
        } catch (e) {
            return message.channel.send({
                embed: {
                    title: `User isn't in this server!`,
                    color: config.embedcolor
                }
            })
        }

    }
}

【问题讨论】:

标签: javascript discord.js


【解决方案1】:

试试这个方法:

if(message.member.roles.highest.comparePositionTo(message.mentions.members.first().roles.highest) > 0){
    //member has higher role then first mentioned member
    if(member.kickable){  //Just in case
        message.mentions.members.first().kick();
    }
}else{
    message.reply("You can't kick your senpai °^°");
}

编辑:在最新的 discord.js 版本中,highestRole 已替换为 roles.highest

【讨论】:

  • 不需要,只要把这段代码放在你要踢会员的地方。 (使用.kick()
  • (node:6160) UnhandledPromiseRejectionWarning: RangeError [BITFIELD_INVALID]: 无效的位域标志或数字。在 Function.resolve (C:\Users\daimk\Desktop\bot\node_modules\discord.js\src\util\BitField.js:150:19) 在 Permissions.has (C:\Users\daimk\Desktop\bot\ node_modules\discord.js\src\util\BitField.js:45:28) 在 Permissions.has (C:\Users\daimk\Desktop\bot\node_modules\discord.js\src\util\Permissions.js:45: 85) 在 Object.run (C:\Users\daimk\Desktop\bot\commands\mod\kick.js:25:40) 在 module.exports (C:\Users\daimk\Desktop\bot\events\guild\ message.js:26:34
  • 您的代码有错误 .hasPermissions() 接受数组输入。把它们像这样.hasPermissions(["ADM...R", "KICK....RS"]) 我注意到你在代码中同时使用了permissions.has().hasPermissions()。你知道这是一种不好的做法
  • 它说 TypeError: message.member.hasPermissions is not a function
  • 抱歉,我是.hasPermission()
猜你喜欢
  • 2020-12-28
  • 2020-09-15
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2021-05-08
  • 2021-08-14
  • 1970-01-01
相关资源
最近更新 更多