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

使用discord.js v14开发踢人命令时遇getUser未定义错误求助

Discord.js v14 踢人命令报错排查

问题

用JavaScript和discord.js v14开发Discord机器人踢人命令时,碰到以下错误:

TypeError: Cannot read properties of undefined (reading 'getUser')

对比别人的类似代码没出问题,想找出自己遗漏的点。我的命令代码如下:

const { SlashCommandBuilder } = require("discord.js");

module.exports={
    data: new SlashCommandBuilder()
    .setName("kick")
    .setDescription("Kick the member provided")
    //.setDefaultMemberPermissions(PermissionFlagsBits.KickMembers)
    .addUserOption(option=>
        option.setName("target")
        .setDescription("The member you'd like to kick'")
        .setRequired(true))
    .addStringOption(option=>option.setName('reason')
    .setDescription("The reason for kicking the member provided")),
    async execute(interaction,client){
        console.log(interaction.options); // Check if options is defined
        const user=interaction.options.getUser("target");
        console.log(user);
        //const user=interaction.options.getUser('target');
        let reason=interaction.options.getString('reason');
        const member = await interaction.guild.members
            .fetch(user.id)
            .catch(console.error);
        if (!reason) reason="Skill issue.";
        await member.kick(reason).catch(console.error);
    user.send({content: `You have been kicked from ${interaction.guild.name}\nReason :${reason}`})
    .catch(console.log('user\'s DM\'s are off.'));
    },
};

排查与修复方案

  • 核心问题:interaction.options 未定义
    这说明执行命令时传入的interaction对象不完整。检查主文件里处理交互的代码,确保调用execute方法时正确传递了interaction参数,比如应该是command.execute(interaction, client),别搞混参数顺序或者漏传参数。

  • 补充修复点

    1. 权限控制:取消注释.setDefaultMemberPermissions(PermissionFlagsBits.KickMembers)之前,得先导入这个常量:const { SlashCommandBuilder, PermissionFlagsBits } = require("discord.js"),防止没权限的用户调用命令。
    2. 成员存在性校验:获取member后加个判断,避免后续报错:
      if (!member) return await interaction.reply({ content: "找不到该成员", ephemeral: true });
      
    3. 给调用者反馈:踢人操作完成后,加个回复通知发起者:
      await interaction.reply({ content: `${user.tag} 已被踢出,原因:${reason}`, ephemeral: true });
      
    4. 优化错误处理:DM发送失败的捕获改成更明确的日志:
      .catch(err => console.log("无法向用户发送DM:", err));
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:03:12