Discord.js开发用户信息命令遇TypeError: Cannot read 'username' of null问题求助
解决Discord.js中
TypeError: Cannot read properties of null (reading 'username')错误 问题分析
报错核心是interaction.options.getUser('target')返回了null,导致后续访问target.username时触发类型错误。即使你将用户选项设置为必填,仍可能因为以下原因出现这个问题:
- Discord API缓存延迟,未正确返回用户对象
- 目标用户已被删除或账号不存在
- 交互数据中用户对象异常缺失
解决方案
修改你的execute函数,添加空值校验,并通过用户ID主动拉取最新用户数据,确保获取到有效的用户对象:
async execute(interaction) { let target = interaction.options.getUser('target'); // 若getUser返回null,尝试通过ID直接拉取用户数据 if (!target) { const userId = interaction.options.get('target').value; try { target = await interaction.client.users.fetch(userId); } catch (error) { return await interaction.reply({ content: '无法找到指定用户,请确认用户ID或账号状态', ephemeral: true }); } } // 构建并发送用户信息Embed const userinfo = new EmbedBuilder() .setTitle(target.username) .setColor(0xE12424) .setThumbnail(target.displayAvatarURL({ dynamic: true })) await interaction.reply({ embeds: [userinfo] }); }
关键改进点
- 空值校验:先判断
target是否存在,避免直接访问null的属性 - 主动拉取用户:使用
users.fetch绕过缓存,直接从Discord API获取最新用户数据 - 错误反馈:捕获拉取失败的异常,给用户清晰的提示信息
内容的提问来源于stack exchange,提问作者Even ware
相关产品推荐
相关产品推荐

