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

Discord.js v13 踢人命令报错:ReferenceError: member is not defined

Discord.js v13 踢人命令报错排查:ReferenceError: member is not defined

错误信息

ReferenceError: member is not defined
    at Object.run (C:\Users\Admin\OneDrive\Desktop\mybots\testbot\src\Commands\Moderation\Kick.js:49:30)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async run (C:\Users\Admin\OneDrive\Desktop\mybots\testbot\src\Events\InteractionCreate.js:32:11)

问题定位

报错指向kick.js第49行的member.user.tag,但代码中并未定义member变量——你通过interaction.options.getMember('user')获取的目标对象变量名为user,这里属于变量名拼写错误。

另外代码中还存在一个潜在报错:使用了time()格式化日期,但未从discord.js导入该工具函数,后续执行到DM通知逻辑时会触发ReferenceError: time is not defined。

修复方案

1. 修正变量名错误

找到kick.js中第49行的代码:

.setDescription(`**${member.user.tag}** was kicked for \`${reason}\`.`);

将member替换为user:

// 两种写法均可,GuildMember 对象可直接访问 tag 属性
.setDescription(`**${user.user.tag}** was kicked for \`${reason}\`.`);
// 或
.setDescription(`**${user.tag}** was kicked for \`${reason}\`.`);

2. 导入缺失的time函数

在kick.js顶部的导入语句中添加time:

const { MessageEmbed, time } = require('discord.js');

3. 修复逻辑覆盖问题

当前代码中,无论确认是否通过,最后都会执行取消流程的更新操作,导致踢人成功后会覆盖之前的成功提示。需要将取消流程的代码放在if (confirmation.proceed)的else分支中:

if (confirmation.proceed) {
  // 原有的踢人成功逻辑...
} else {
  const embed = new MessageEmbed()
    .setTitle('Process Cancelled')
    .setColor('ORANGE')
    .setDescription(`${user} was not kicked.`);

  if (confirmation.reason) embed.setFooter({ text: confirmation.reason });

  await confirmation.i.update({
    embeds: [embed],
    components: []
  });
}

额外说明

  • interaction.options.getMember('user')返回的是GuildMember对象,包含用户在服务器中的相关信息,可直接使用其属性(如user.tag或user.displayName)。
  • Discord.js v13中,斜杠命令的参数获取方式与旧版本不同,确保使用getMember(获取服务器成员)而非getUser(仅获取用户对象,无服务器权限相关属性)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:36:18