javascript - 踢球时的等级问题| Discord.js

标签 javascript json discord.js

我不知道如何解决此问题 使用此代码时出现错误:

I can't kick that person due to role hierarchy.

即使很困难,我的机器人也高于我想要踢的人。导致此问题的原因是什么?


module.exports = {
    name: 'kick',
    description: 'Kick someone!',
    alias: '',
    access: 'Moderators',
    command: '!kick',
    execute(Discord, client, msg, args) {
        msg.delete(5000);

        if (!args[0]) {
            return msg.reply("Please provide a person to kick.")
                .then(m => m.delete(5000));
        }
        if (!args[1]) {
            return msg.reply("Please provide a reason to kick.")
                .then(m => m.delete(5000));
        }
        if (!msg.member.hasPermission("KICK_MEMBERS")) {
            return msg.reply("❌ You need to be an **admin** or **moderator** to use this command.")
                .then(m => m.delete(5000));
        }
        if (!msg.guild.me.hasPermission("KICK_MEMBERS")) {
            return msg.reply("❌ I do not have permissions to kick members. Please contact a staff member")
                .then(m => m.delete(5000));
        }

        var kUser = msg.mentions.users.first() || msg.guild.members.get(args[0]);

        if (!kUser) {
            return msg.reply("Couldn't find that member, try again")
                .then(m => m.delete(5000));
        }
        if (kUser.id === msg.author.id) {
            return msg.reply("You can't kick yourself...")
                .then(m => m.delete(5000));
        }
        if (!kUser.kickable) {
            return msg.reply("I can't kick that person due to role hierarchy.")
                .then(m => m.delete(5000));
        }

        const embed = new RichEmbed()
        .setColor("#ff0000")
        .setThumbnail(kUser.user.displayAvatarURL)
        .setFooter(msg.member.displayName, msg.author.displayAvatarURL)
        .setTimestamp()
        .setDescription(stripIndents`**> Kicked member:** ${kUser} (${kUser.id})
        **> Kicked by:** ${msg.member} (${msg.member.id})
        **> Reason:** ${args.slice(1).join(" ")}`);

    const promptEmbed = new RichEmbed()
        .setColor("GREEN")
        .setAuthor(`This verification becomes invalid after 30s.`)
        .setDescription(`Do you want to kick ${kUser}?`)

    // Send the msg
    msg.channel.send(promptEmbed).then(async msg => {
        // Await the reactions and the reaction collector
        const emoji = await promptmsg(msg, msg.author, 30, ["✅", "❌"]);

        // The verification stuffs
        if (emoji === "✅") {
            msg.delete();

            kUser.kick(args.slice(1).join(" "))
                .catch(err => {
                    if (err) return msg.channel.send(`Well.... the kick didn't work out. Here's the error ${err}`)
                });

        } else if (emoji === "❌") {
            msg.delete();

            msg.reply(`Kick canceled.`)
                .then(m => m.delete(10000));
        }
    });
}
};



const fs = require('fs');
const Discord = require("discord.js");
const client = new Discord.Client();

const {prefix, token} = require("./config/dependencies.json");

client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    client.commands.set(command.name, command);
}

client.once('ready', () => {
    console.log(`${client.user.username} is ready!`);
    client.user.setActivity("m!", { type: 'LISTENING' })
});

client.on('message', msg => {

    if (!msg.content.startsWith(prefix) || msg.author.bot) return;

    const args = msg.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();

    if (!client.commands.has(command)) return;

    try {
        client.commands.get(command).execute(Discord, client, msg, args);
    } catch (error) {
        console.error(error);
        msg.reply(`That command does not exist ErrorID : &${Math.ceil(Math.random() * 10)}SE`);
}

});


client.login(token);


问题可能出在 KICK.JS 文件中,我在其中检查该人是否可踢,但我无法弄清楚原因。

谢谢!

最佳答案

正如我在这里看到的:

var kUser = msg.mentions.users.first() || msg.guild.members.get(args[0]);

您有时会使用 User 定义 kUser 变量:

var kUser = msg.mentions.users.first() // Returns a User object

有时还有成员:

var kUser = msg.guild.members.get(args[0]) // Returns a Member object

但是,kickable 属性仅在Member 对象上可用。您可以通过编辑此行轻松修复它:

var kUser = msg.mentions.members.first() || msg.guild.members.get(args[0]);

在所有情况下,它将返回一个 Member 对象。 (您还应该使用 kMember 重命名您的变量)

关于javascript - 踢球时的等级问题| Discord.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369833/

相关文章:

javascript - 我的 Discord 机器人使用 Discord.js 一次发送多条消息

node.js - 我怎样才能获得一个角色的成员,其最高角色是该角色

node.js - Discord.js : TypeError: client. channels.get 不是函数

javascript - jQuery 查找最大元素的高度

java - 在java中读取格式化的excel文件并将其转换为JSON格式的一个好策略是什么?

javascript - 使用 truncate.js chop 多行 html 文本

javascript - 下一个和上一个按钮中的 Json 数据

javascript - Laravel - 在保存到数据库之前删除 JSON header

javascript - 防止将 Jquery Dialog 内容的 CSS 应用于主窗口

javascript - 在没有 jQuery 和使用 createElement 的情况下展开元素