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

Discord.js SlashCommand报错:TypeError: 无法读取undefined的getUser属性

问题解决:Discord.js Slash命令移除用户报错 TypeError: Cannot read properties of undefined (reading 'getUser')

错误原因

你代码中使用了interaction.subcommand.getUser('user'),但Discord.js的Interaction对象并没有subcommand这个属性,导致尝试读取getUser方法时触发undefined错误。所有子命令中的选项,都需要通过interaction.options对象来获取。

修正后的代码

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

module.exports = {
    data: new SlashCommandBuilder()
        .setName('remove')
        .setDescription('Removes a user from the ticket') // 修正描述介词错误
        .addSubcommand(subcommand =>
            subcommand
                .setName('user')
                .setDescription('Remove tagged User') // 修正拼写错误 taged→tagged
                .addUserOption(option => 
                    option.setName('user')
                        .setDescription('The user')
                        .setRequired(true) // 设置为必填选项,避免无用户输入的情况
                )), 
    async execute(interaction, client) {
        // 从选项中获取目标用户
        const user = interaction.options.getUser('user');
        const channel = interaction.channel;

        // 检查用户是否有效
        if (!user) {
            return await interaction.reply({ 
                content: '请指定一个有效的用户!', 
                ephemeral: true 
            });
        }

        try {
            // 修改频道权限,移除用户的查看和发送消息权限
            await channel.permissionOverwrites.edit(user, { 
                ViewChannel: false,
                SendMessages: false
            });
            await interaction.reply({ content: `${user} 已从工单频道中移除!` });
        } catch (error) {
            console.error('移除用户时出错:', error);
            await interaction.reply({ 
                content: '移除用户失败,请检查频道权限设置!', 
                ephemeral: true 
            });
        }
    },
};

关键修改点

  • 替换interaction.subcommand.getUser('user')为interaction.options.getUser('user'):这是获取子命令选项的正确方式。
  • 添加必填选项设置.setRequired(true):强制用户指定目标用户,避免无输入导致的错误。
  • 增加错误捕获逻辑:处理权限不足或其他异常情况,提供友好提示。
  • 修正描述中的拼写和语法错误:提升命令可读性。
  • 使用interaction.reply替代interaction.channel.reply:符合Discord交互响应规范,避免交互超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:41:33