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

discord.js v12运行kick命令出现BITFIELD_INVALID错误如何解决?

问题原因

你遇到的RangeError [BITFIELD_INVALID]: Invalid bitfield flag or number报错,核心原因是你在权限判断中使用了discord.js v12不存在的权限标识MANAGE_MEMBERS,框架无法识别这个无效的权限位就抛出了对应错误。

修复方案

按照以下步骤修改代码即可解决问题:

  • 替换无效权限位
    删除权限判断中的!perm.has("MANAGE_MEMBERS")条件,或者替换为discord.js v12支持的等价权限(比如MANAGE_ROLES,即管理角色权限),修改后的代码如下:
if (!perm.has("KICK_MEMBERS")&&!perm.has("MANAGE_GUILD")&&!perm.has("MANAGE_ROLES")&&!perm.has("ADMINISTRATOR"))
  return message.mentionReply(`${process.env.EMOTE_NO || '<:tairitsuno:869919370208509962>'}`+" | 你没有踢人的权限!");
  • 修复拼写错误
    你代码中存在笔误mentinReply,修正为正确的mentionReply:
if (!args[0]) {
  return message.mentionReply(
    `${process.env.EMOTE_NO || '<:tairitsuno:869919370208509962>'}`+" | 请@你要踢的用户或者输入对方的用户ID"
  );
}
  • 移除无效逻辑
    if (target === !args[0])这段判断逻辑完全无效,直接删除即可,你已经在前面做了args[0]的非空校验,不需要重复判断。

  • 优化用户拉取逻辑
    你当前的fetch写法在拉取用户失败后,无法终止整个方法的执行,会导致后续访问target.id时报错,替换为try catch写法:

let target;
try {
  target = await message.guild.members.fetch(args[0].replace("<@!", "").replace("<@","").replace(">",""))
} catch(err) {
  return message.mentionReply(`${process.env.EMOTE_NO || '<:tairitsuno:869919370208509962>'}`+" | 找不到该用户");
}
  • 补充Bot权限优先级判断
    你只校验了命令使用者的角色优先级,没有校验Bot自身的角色是否高于目标用户,会出现权限足够但踢人失败的问题,在用户角色判断后补充这段代码:
let BotRole = message.guild.member(message.guild.me).roles.highest.position;
let Role = target.roles.highest.position;
let UserRole = message.member.roles.highest.position;

if (UserRole <= Role) return message.mentionReply(`${process.env.EMOTE_NO || '<:tairitsuno:869919370208509962>'}`+' | 你无法踢除该用户,他的角色优先级比你高或者和你相同!');
// 新增Bot角色判断
if (BotRole <= Role) return message.mentionReply(`${process.env.EMOTE_NO || '<:tairitsuno:869919370208509962>'}`+' | 我无法踢除该用户,他的角色优先级比我高或者和我相同!');

内容的提问来源于stack exchange,提问作者Thành Lê

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 23:12:03