使用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),别搞混参数顺序或者漏传参数。补充修复点
- 权限控制:取消注释
.setDefaultMemberPermissions(PermissionFlagsBits.KickMembers)之前,得先导入这个常量:const { SlashCommandBuilder, PermissionFlagsBits } = require("discord.js"),防止没权限的用户调用命令。 - 成员存在性校验:获取
member后加个判断,避免后续报错:if (!member) return await interaction.reply({ content: "找不到该成员", ephemeral: true }); - 给调用者反馈:踢人操作完成后,加个回复通知发起者:
await interaction.reply({ content: `${user.tag} 已被踢出,原因:${reason}`, ephemeral: true }); - 优化错误处理:DM发送失败的捕获改成更明确的日志:
.catch(err => console.log("无法向用户发送DM:", err));
- 权限控制:取消注释
内容的提问来源于stack exchange,提问作者Mushkin Fyodosky
相关产品推荐
相关产品推荐

