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

Discord.js开发工具机器人时出现ReferenceError: member未定义问题问询

错误修复方案

1. 核心报错(ReferenceError: member is not defined)修复

你代码中自行声明的member变量和报错指向的member不是同一个,报错来源于第一行权限判断中对msg.member的访问:

  • 只有服务器频道内触发的消息才会携带msg.member属性,私信场景下触发命令时msg对象不存在member属性,直接访问就会抛出未定义错误
  • 修复方案:在函数最开头加一层服务器场景判断:
if(!msg.guild) return msg.reply('该命令只能在服务器内使用')

2. 其他隐藏BUG修复

导入语句错误

当前第一行导入写法错误,discord.js没有导出Discord对象,会导致后续创建Embed时报错,两种写法二选一即可:

  • 全量导入:
const Discord = require("discord.js");
  • 按需解构导入(性能更优):
const { MessageEmbed } = require("discord.js");
// 后续创建Embed直接写new MessageEmbed()即可,不需要加Discord前缀

提及用户获取错误

msg.mentions.user.first()属性名拼写错误,正确为复数形式users,修改为:

var user = msg.mentions.users.first() || msg.guild.members.cache.get(args[0]);

变量名拼写错误

你定义的日志Embed变量名为log,发送时写成了logs多了一个s,会抛出变量未定义错误,修改为:

channel.send(log);

权限方法适配(discord.js v13+版本)

新版本discord.js已经废弃hasPermission方法,统一使用permissions.has,修改两处权限判断:

// 原用户权限判断修改为
if(!msg.member.permissions.has('BAN_MEMBERS'))
// 原目标用户权限判断修改为
if(member.permissions.has('MANAGE_MESSAGES'))

逻辑不一致修复

原日志Embed描述写的是has been kicked,但实际执行的是封禁操作,描述和实际行为不符,建议统一修改为封禁相关描述。

修复后完整代码

// 按需导入为例
const { MessageEmbed } = require("discord.js");

exports.run = async(client, msg, args) => {
    // 前置判断:仅服务器内可用
    if(!msg.guild) return msg.reply('该命令只能在服务器内使用')
    if(!msg.member.permissions.has('BAN_MEMBERS')) return msg.reply('你没有使用该命令的权限!')

    var user = msg.mentions.users.first() || msg.guild.members.cache.get(args[0]);
    if(!user) return msg.reply('你没有指定要封禁的用户!')
    var member;
    try {
        member = await msg.guild.members.fetch(user)
    } catch(err) {
        member = null;
    }
    if(member){
        if(member.permissions.has('MANAGE_MESSAGES')) return msg.reply('你不能封禁其他管理组成员!');
    }

    var reason = args.splice(1).join(' ');
    if(!reason) return msg.reply('请指定封禁该用户的理由!')
    var channel = msg.guild.channels.cache.find(c => c.name === 'mod-logs');
    var verify = msg.guild.emojis.cache.find(emoji => emoji.name === 'white_check_mark')
    var log = new MessageEmbed()
    .setColor('0xecd776')
    .setDescription(`${verify} ${user} 已被 ${msg.author} 封禁,理由为:"**${reason}**"`)
    channel.send(log);

    var userLog = new MessageEmbed()
    .setColor('0xecd776')
    .setDescription(`你已被移出服务器,如有异议可联系管理组申诉。`)
    try {
        await user.send(userLog);
    } catch(err) {
        console.warn(err);
    }

    msg.guild.members.ban(user);
    var confir = new MessageEmbed()
    .setColor('0xecd776')
    .setDescription(`${verify} ${user} 已被 ${msg.author} 封禁,理由为:"**${reason}**"`)
    msg.channel.send(confir);
    msg.delete();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:06:03