You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.js v14中PermissionsBitField未定义错误求助

解决discord.js v14中PermissionsBitField未定义的错误

错误根源

  1. 未导入PermissionsBitField:代码中使用了PermissionsBitField.Flags但未从discord.js中导入该对象,导致变量未定义。
  2. 成员对象获取冗余:interaction.member本身就是当前执行命令的GuildMember实例,无需再通过interaction.guild.members.cache.get(interaction.member.id)重复获取。
  3. User对象无法执行踢人操作:interaction.options.getUser('user')返回的是User对象,没有kickable和kick方法,必须获取对应的GuildMember对象才能执行踢人逻辑。

修正步骤

  • 正确导入PermissionsBitField(或使用Permissions别名)
  • 简化权限判断的成员获取逻辑
  • 将User对象转为GuildMember对象进行后续操作

修正后的完整代码

const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionsBitField } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('kick')
        .setDescription('Kick a member')
        .addUserOption(option =>
            option.setName('user')
                .setDescription('The user to kick')
                .setRequired(true))
        .addStringOption(option =>
            option.setName('reason')
                .setDescription('Reason for kicking')),

    async execute(interaction) {
        const targetUser = interaction.options.getUser('user');
        const targetMember = interaction.guild.members.cache.get(targetUser.id);
        const reason = interaction.options.getString('reason') || 'No reason provided';

        if (!interaction.member.permissions.has([PermissionsBitField.Flags.KickMembers, PermissionsBitField.Flags.BanMembers])) {
            return interaction.reply({ content: '你没有使用该命令的权限。', ephemeral: true });
        }

        if (!targetMember) {
            return interaction.reply({ content: '无法找到该服务器成员。', ephemeral: true });
        }

        if (!targetMember.kickable) {
            return interaction.reply({ content: '该成员无法被踢出。', ephemeral: true });
        }

        await targetMember.kick(reason);
        await interaction.reply({ content: `成功踢出 ${targetUser.tag}。`, ephemeral: true });
    },
};

额外说明

  • 如果习惯用Permissions作为别名,可将导入语句改为const { Permissions: PermissionsBitField } = require('discord.js');,代码中PermissionsBitField.Flags可正常使用。
  • 权限判断的has方法支持单个权限或权限数组,无需改为get,之前的错误核心是PermissionsBitField未定义。

内容的提问来源于stack exchange,提问作者Sabaii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:07:45