Discord.js TypeError: interaction.options.getUser不是函数的解决方法
解决Discord.js v13中
interaction.options.getUser is not a function错误 错误核心原因
Discord.js v13里,interaction.options.getUser()仅能在已定义USER类型选项的斜杠命令中调用。如果命令未配置对应选项、调用语法错误,或是混淆了v13与v14的API差异,就会触发这个报错。
分步修复方案
1. 检查并修正斜杠命令的选项定义
确保注册/profil命令时,正确配置用户类型选项(若需要指定目标用户)。示例注册代码:
const { SlashCommandBuilder } = require('@discordjs/builders'); module.exports = { data: new SlashCommandBuilder() .setName('profil') .setDescription('展示用户个人资料') // 可选:添加用户选项,允许指定目标用户,不填则默认调用者 .addUserOption(option => option.setName('user') .setDescription('要查看的用户') .setRequired(false)), async execute(interaction) { // 执行逻辑写在这里 }, };
2. 修正选项获取代码
在命令执行函数中,按v13语法正确获取用户:
const { MessageEmbed } = require('discord.js'); async execute(interaction) { // 获取指定用户,无输入则默认使用命令调用者 const targetUser = interaction.options.getUser('user') || interaction.user; // 构建个人资料嵌入消息 const profileEmbed = new MessageEmbed() .setColor('#0099ff') .setTitle(`${targetUser.tag} 的个人资料`) .setThumbnail(targetUser.displayAvatarURL({ dynamic: true })) .addFields( { name: '用户ID', value: targetUser.id, inline: true }, { name: '账号创建时间', value: targetUser.createdAt.toLocaleString(), inline: true }, { name: '加入服务器时间', value: interaction.guild.members.cache.get(targetUser.id).joinedAt.toLocaleString(), inline: true } ) .setTimestamp(); await interaction.reply({ embeds: [profileEmbed] }); }
3. 确认依赖版本兼容性
确保项目依赖版本正确:
- 检查Discord.js版本:
npm list discord.js
- 若版本不符,重新安装指定版本:
npm install discord.js@13.15.1
- 配套依赖需兼容v13,安装对应版本:
npm install @discordjs/builders@0.16.0 discord-api-types@0.33.5
4. 重新部署斜杠命令
修改命令定义后,必须重新运行部署脚本,让Discord服务器同步更新命令结构,否则新选项不会生效。
额外排查点
如果以上步骤无效,检查错误栈指向的代码行:
- 确认是否误将
interaction对象当成了普通消息对象message - 确认是否在非斜杠命令交互(如按钮、菜单交互)中错误调用了
getUser()
内容的提问来源于stack exchange,提问作者Di Mostavay
相关产品推荐
相关产品推荐

