You need to enable JavaScript to run this app. Discord.js实现用户信息命令时出现users属性未定义报错
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js实现用户信息命令时出现users属性未定义报错

报错根因与修正方案

报错触发逻辑

报错信息TypeError: Cannot read property 'users' of undefined的直接触发点为代码中的const user = message.mentions.users.first() || message.author行:执行到这行时,message.mentions对象本身为undefined,才会出现读取其下users属性失败的问题。该问题完全由代码适配的discord.js版本过旧导致,和你后续排查的结论一致。

核心过时API对应问题

  • 代码中使用的Discord.RichEmbed是discord.js v12及更早版本的内置类,从v13版本开始该类被重命名为MessageEmbed,当前最新稳定版v14已彻底移除RichEmbed的全局定义,类缺失会连带导致bot事件加载逻辑异常,最终出现mentions对象为空的情况。
  • 旧版属性user.presence.game已被完全移除,新版discord.js中用户的活动数据存储在user.presence.activities数组中,不存在game字段。
  • 旧版可直接遍历的member.roles集合,在新版中被封装为RoleManager结构,必须通过member.roles.cache才能获取角色集合做映射拼接。
  • 新版discord.js要求主动开启对应权限意图:如果没有配置启用MessageContent、GuildMembers、GuildPresences这三个核心意图,就算API写法完全匹配版本,也会出现message.mentions为undefined、成员角色获取失败、用户状态读不到的问题。

适配discord.js v14的修正参考代码

const { MessageEmbed } = require('discord.js'); // 导入正确的Embed类

module.exports.run = async (bot, message, args) => {
  const user = message.mentions.users.first() || message.author;
  const member = message.mentions.members.first() || message.member;
  
  const embed = new MessageEmbed()
    .setAuthor({ name: user.tag })
    .setDescription("用户信息")
    .setColor("#64FF00")
    .addField("完整用户名:", user.tag, true)
    .addField("ID:", user.id, true)
    .addField("账号创建时间:", user.createdAt.toLocaleString(), true)
    .addField("当前状态:", user.presence?.status ?? 'offline', true)
    .addField("正在进行的活动:", user.presence?.activities?.[0]?.name ?? '无', true)
    .addField("拥有角色", member.roles.cache.map(r => `${r}`).join(' | '), true);

  message.channel.send({ embeds: [embed] });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 08:36:04