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

Discord.js报错:message is not defined 求助(Node.js新手)

解决Discord.js userinfo命令中的ReferenceError: message is not defined错误

首先,先明确你遇到的错误:

(node:6312) UnhandledPromiseRejectionWarning: ReferenceError: message is not defined at userInfo (C:\Users\deris\Desktop\Проекты\Node.js\discord.js\JSBot-master\commands\userinfo.js:10:23) at Object.exports.run (C:\Users\deris\Desktop\Проекты\Node.js\discord.js\JSBot-master\commands\userinfo.js:5:26)

你的原始代码如下:

const Discord = require('discord.js');
exports.run = async (bot, message, args) => {
    let userInfMent = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]))
    message.channel.send(userInfo(userInfMent));
}
function userInfo(user) {
    const Discord = require('discord.js');
    let userInfMent = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]))
    var userCreated = userInfMent.createdAt.toString().split(' ');
    var lastMsg = userInfMent.lastMessage.createdAt.toString().split(' ')
    const userInfoEmbed = new Discord.RichEmbed()
        .addField('Никнейм: ', userInfMent.username)
        .addField('Тег: ', userInfMent.tag)
        .addField('ID: ', userInfMent.id)
        .addField('Аккаунт был создан: ', userCreated[1] + ', ' + userCreated[2] + ', ' + userCreated[3])
        .addField('Последнее сообщение: ', userInfMent.lastMessage + ' в ' + lastMsg[1] + ', ' + lastMsg[2] + ', ' + lastMsg[3] + ', ' + lastMsg[4])
        .addField('Статус: ', userInfMent.presence.status)
        .setColor('RANDOM')
        .setThumbnail(userInfMent.avatarURL);
    return userInfoEmbed
}

错误原因分析

这个报错的核心是作用域问题:

  • message和args变量只在exports.run函数的范围内有效,你在userInfo函数里直接调用它们,函数根本找不到这两个变量,所以抛出了ReferenceError。
  • 而且你已经把目标用户对象userInfMent作为参数传给了userInfo函数,但在函数内部又重复去获取用户,完全是多余操作,还引发了错误。

除此之外还有几个需要修正的小问题:

  1. 重复引入Discord模块,顶部已经引入过了,函数内不需要再次引入。
  2. RichEmbed在Discord.js v12及以上版本已经被废弃,应该使用MessageEmbed。
  3. 你传入的user是GuildMember对象,直接访问.username、.tag等属性会出错,需要通过.user属性获取对应的用户信息。
  4. 如果用户从未发送过消息,user.lastMessage会是null,直接访问.createdAt会导致报错,需要做容错处理。

修复后的完整代码

const Discord = require('discord.js');
exports.run = async (bot, message, args) => {
    // 获取目标用户:优先提及用户,其次通过ID查找,默认是命令发起者
    const targetUser = message.mentions.members.first() 
                       || message.guild.members.cache.get(args[0]) 
                       || message.member;

    // 调用userInfo函数并发送嵌入消息
    const userEmbed = userInfo(targetUser);
    message.channel.send({ embeds: [userEmbed] });
}

function userInfo(member) {
    // 从GuildMember对象中提取用户信息
    const user = member.user;
    
    // 处理账号创建时间
    const userCreated = user.createdAt.toString().split(' ');
    const formattedCreationDate = `${userCreated[1]}, ${userCreated[2]}, ${userCreated[3]}`;

    // 处理最后一条消息,添加容错
    let lastMsgInfo = "从未发送过消息";
    if (member.lastMessage) {
        const lastMsg = member.lastMessage.createdAt.toString().split(' ');
        lastMsgInfo = `${member.lastMessage.content} в ${lastMsg[1]}, ${lastMsg[2]}, ${lastMsg[3]}, ${lastMsg[4]}`;
    }

    // 使用MessageEmbed替代废弃的RichEmbed
    const userInfoEmbed = new Discord.MessageEmbed()
        .addField('Никнейм: ', user.username)
        .addField('Тег: ', user.tag)
        .addField('ID: ', user.id)
        .addField('Аккаунт был создан: ', formattedCreationDate)
        .addField('Последнее сообщение: ', lastMsgInfo)
        .addField('Статус: ', member.presence?.status || 'неизвестен')
        .setColor('RANDOM')
        .setThumbnail(user.displayAvatarURL({ dynamic: true })); // 使用displayAvatarURL支持动态头像

    return userInfoEmbed;
}

关键修改点说明

  1. 作用域修复:userInfo函数现在只依赖传入的member参数,不再尝试访问外部的message/args变量。
  2. 用户获取优化:添加了默认值(命令发起者),并使用cache.get替代已废弃的get方法(Discord.js v12+要求从缓存中获取成员)。
  3. 废弃API替换:用MessageEmbed替换RichEmbed,并调整消息发送方式为{ embeds: [userEmbed] }(v13+要求的格式)。
  4. 容错处理:对lastMessage和presence.status做了空值判断,避免因用户无消息/离线导致的报错。
  5. 头像优化:使用displayAvatarURL({ dynamic: true })支持用户的动态GIF头像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:39