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

discord.js V13 Embed报错:Member Since字段触发EMBED_FIELD_NAME错误

Discord.js V13 /userinfo 命令报错修复

报错现象

开发基于discord.js V13的/userinfo用户信息查询斜杠命令时功能运行异常,错误定位在MessageEmbed的"Member Since:"字段,控制台核心报错如下:

if (typeof data !== 'string') throw new error(errorMessage);
RangeError [EMBED_FIELD_NAME]: MessageEmbed field names must be non-empty strings.

错误根因

代码存在3个核心问题:

  • MessageEmbed.addField() 传参格式错误:discord.js V13的addField方法接收3个独立参数(字段名、字段值、内联布尔值),代码中ID、Member Since两个字段传入了对象格式(该写法为V14专属语法),V13无法解析对象内的name属性,拿到的字段名为undefined,触发「字段名必须是非空字符串」的报错。
  • 缺失member变量定义:代码中Member Since字段调用了member.joinedAt,但仅通过getUser()获取了全局User对象,未通过getMember()获取当前服务器的成员对象,直接访问未定义变量会触发引用错误。
  • 属性挂载对象错误:nickname(服务器昵称)、joinedAt(加入服务器时间)属于GuildMember(服务器成员)对象的属性,不属于全局User对象,直接在User对象上调用会返回undefined。

修复后可运行代码

const { CommandInteraction, Client, MessageEmbed } = require(`discord.js`);
const moment = require("moment");
const emoji = [
    { name: "DISCORD_EMPLOYEE", emoji: "<:Staff:994985083633160272>" },
    { name: "DISCORD_CERTIFIED_MODERATOR", emoji: "<:CertifiedModerator:994985105724551218>" },
    { name: "PARTNERED_SERVER_OWNER", emoji: "<:ServerPartner:994985085780643850>" },
    { name: "HYPESQUARD_EVENTS", emoji: "<:HypeSquardEvents:994985103824523296>" },
    { name: "HOUSE_BRAVERY", emoji: "<:HouseBraveryMember:994985087856820345>" },
    { name: "HOUSE_BRILLIANCE", emoji: "<:HouseBrillianceMember:994985091883348048>" },
    { name: "HOUSE_BALANCE", emoji: "<:HouseBalanceMember:994985089949777920>" },
    { name: "BUGHUNTER_LEVEL_1", emoji: "<:BugHunterLvL1:994985107939147936>" },
    { name: "BUGHUNTER_LEVEL_2", emoji: "<:BigHunterLvL2:994985101580566588>" },
    { name: "EARLY_VERIFIED_BOT_DEVELOPER", emoji: "<:VerifiedDeveloper:994985099135295529>" },
    { name: "EARLY_SUPPORTER", emoji: "<:EarlyNitroSupporter:994985096706801915>" }
  ];

module.exports = {
    name: `userinfo`,
    description: `Get a persons user information`,
    permission: "ADMINISTRATOR",
    usage: "/userinfo [USER]",
    options: [{
        name: 'user',
        type: 'USER',
        description: 'Select a user',
        required: true,
    }],
    /**
     * @param {CommandInteraction} interaction
     * @param {Client} client
     */
    async execute(interaction, client) {
        // 同时获取全局用户对象、当前服务器成员对象
        const targetUser = interaction.options.getUser('user')
        const targetMember = interaction.options.getMember('user')
        await targetUser.fetch();
        const flags = targetUser.flags.toArray();

        let badges = [];
          emoji.forEach((e) => {
            if (flags.includes(e.name)) badges.push(e.emoji);
          });
        const startMessage = new MessageEmbed()
            .setTitle(`${targetUser.tag}`)
            .setColor("BLURPLE")
            .setDescription(`**Badges:** ${badges.join(" ")}`)
            .setThumbnail(targetUser.avatarURL({ dynamic: true }))
            // 统一使用V13 addField三参数传参格式
            .addField('ID:', `\`\`\`${targetUser.id}\`\`\``)
            .addField("Member Since:", `\`\`\`<t:${parseInt(targetMember.joinedAt / 1000)}:R>\`\`\``, true)
            .addField('Nickname:', `\`\`\`${targetMember.nickname || "无"}\`\`\``, true)
            .addField('Bot Account:', `\`\`\`${targetUser.bot ? "是" : "否"}\`\`\``, true)
            .addField('Discriminator:', `\`\`\`#${targetUser.discriminator}\`\`\``, true)
            // 修正Nitro判断属性,原premiumSubscriptionCount为服务器加成计数,不属于用户Nitro状态属性
            .addField('Nitro:', `${targetUser.premiumType ? '\`\`\`是\`\`\`' : '\`\`\`否\`\`\`'}`,true)
            .addField("Banner:", `${targetUser.bannerURL() ? "\`\`\`有\`\`\`" : "\`\`\`无\`\`\`"}`, true)
            .addField('Discord Account Created at:', `\`\`\`${moment(targetUser.createdAt).format('MMM Do YYYY')}\`\`\``, true)
            .setImage(targetUser.bannerURL({ dynamic: true, size: 512 }) || "")
        await interaction.reply({ embeds: [startMessage] });
    }
}

修复说明

  • 所有addField调用统一使用V13要求的「字段名、字段值、内联配置」三参数格式,不再传入V14专属的对象参数。
  • 新增targetMember变量存储服务器成员对象,将服务器相关属性(加入时间、昵称)的调用迁移到该对象上。
  • 修正Nitro状态判断逻辑,使用User对象的premiumType属性判断用户是否开通Nitro。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:21:26