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

Discord机器人kick命令报错:Cannot read properties of undefined (FLAGS)

解决Discord机器人Kick命令的TypeError错误

执行Discord机器人的kick命令时触发如下错误:

TypeError: 无法读取未定义的属性(读取'FLAGS')
在 handleKickCommand (/home/runner/VPL-BOT/index.js:246:45)
在 Client. (/home/runner/VPL-BOT/index.js:189:11)
在 Client.emit (node:events:513:28)
在 Client.emit (node:domain:489:12)
在 InteractionCreateAction.handle (/home/runner/VPL-BOT/node_modules/discord.js/src/client/actions/InteractionCreate.js:97:12)
在 module.exports [as INTERACTION_CREATE] (/home/runner/VPL-BOT/node_modules/discord.js/src/client/websocket/handlers/INTERACTION_CREATE.js:4:36)
在 WebSocketManager.handlePacket (/home/runner/VPL-BOT/node_modules/discord.js/src/client/websocket/WebSocketManager.js:354:31)
在 WebSocketManager. (/home/runner/VPL-BOT/node_modules/discord.js/src/client/websocket/WebSocketManager.js:238:12)
在 WebSocketManager.emit (/home/runner/VPL-BOT/node_modules/@vladfrangu/async_event_emitter/dist/index.js:282:31)
在 Client实例上触发'error'事件:
在 emitUnhandledRejectionOrErr (node:events:394:10)

对应的命令处理代码:

async function handleKickCommand(interaction) {
  const userOption = interaction.options.getUser("user");
  const reasonOption = interaction.options.getString("reason");

  if (!userOption) {
    return interaction.reply("请指定需要踢出的用户。");
  }

  const userToKick = interaction.guild.members.cache.get(userOption.id);

  if (!userToKick) {
    return interaction.reply("在服务器中未找到该用户。");
  }

  const member = interaction.guild.members.cache.get(interaction.user.id);
  if (!member.permissions.has(Permissions.FLAGS.KICK_MEMBERS)) {
    return interaction.reply('您没有执行"kick"命令的权限。');
  }

  try {
    await userToKick.kick(reasonOption || "无理由。");

    await interaction.reply(`已踢出用户 ${userToKick.user.tag}。`);
  } catch (error) {
    console.error(error);
    await interaction.reply('执行"kick"命令时发生错误。');
  }
}

问题原因

报错核心是**Permissions对象未正确导入/引用**,且Discord.js v13及以上版本已废弃Permissions.FLAGS的写法,改用新的权限常量结构。

修复步骤

  1. 正确导入权限模块
    根据你的模块系统选择对应导入方式:

    • CommonJS(require语法):
      const { PermissionsBitField } = require('discord.js');
      
    • ES模块(import语法):
      import { PermissionsBitField } from 'discord.js';
      
  2. 替换权限常量引用
    将代码中Permissions.FLAGS.KICK_MEMBERS替换为PermissionsBitField.Flags.KICK_MEMBERS:

    if (!member.permissions.has(PermissionsBitField.Flags.KICK_MEMBERS)) {
      return interaction.reply('您没有执行"kick"命令的权限。');
    }
    
  3. 优化成员获取逻辑
    不需要从缓存中手动获取当前交互用户的成员对象,直接使用interaction.member即可:

    // 替换原代码中的成员获取行
    const member = interaction.member;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:00:27