【问题标题】:Hierarchy issues when kicking | Discord.js踢球时的层次结构问题 |不和谐.js
【发布时间】:2020-04-09 16:42:36
【问题描述】:

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

由于角色等级,我不能踢那个人。

即使我的 bot 比我要踢的人还强硬。导致此问题的原因可能是什么?


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 文件中,我在其中检查此人是否可踢但我不知道原因。

谢谢!

【问题讨论】:

  • 即使是bot在上面,也可能是bot权限造成的。你确定机器人是管理员吗?
  • 机器人被设置为管理员。

标签: javascript json discord.js


【解决方案1】:

我可以在这里看到:

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重命名你的变量)

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多