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
相关产品推荐
相关产品推荐

