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

Discord.js用户信息指令如何将徽章枚举名替换为友好可读文本

错误原因
  • 你代码里的target.flags是Discord.js提供的BitField结构对象,不是字符串,直接和枚举值字符串做相等判断永远不会触发,替换逻辑完全没有运行
  • target.flags.toArray()返回的是原始枚举标识组成的数组,即使修改target.flags对象也不会改变该方法的返回值
修复后代码

采用映射表存储转换规则,扩展性更强,后续新增徽章只需新增映射项即可:

if(!target) {
    message.reply(` Mention a user if you want to find their info. `)
} else {
    // 徽章枚举值转友好文本映射表
    const badgeMap = {
        HOUSE_BALANCE: 'Hypesquad Balance',
        HOUSE_BRILLIANCE: 'Hypesquad Brillance',
        HOUSE_BRAVERY: 'Hypesquad Bravery',
        VERIFIED_BOT: 'Verified Bot',
        // 后续新增其他徽章转换直接在这里加键值对即可
        EARLY_VERIFIED_BOT_DEVELOPER: 'Early Verified Bot Developer',
        DISCORD_EMPLOYEE: 'Discord Staff'
    }
    var member = message.guild.members.cache.get(target.id)  
    // 先获取原始枚举数组
    let rawFlags = target.flags.toArray()
    // 遍历替换为友好文本,无匹配规则则保留原始值
    let flags = rawFlags.map(flag => badgeMap[flag] || flag).join('、')
    // 处理无徽章的场景
    if (!flags) flags = '无'

    let embed = new Discord.MessageEmbed()
        .setTitle(`Userinfo`) 
        .setColor(`BLUE`)
        .setThumbnail(target.avatarURL({ size: 2048, dynamic: true }))
        .addFields (
            {name: `Username + tag`, value: `` + target.tag, inline: true},
            {name: `Server join date`, value: `` + `${moment.utc(member.joinedAt).format("dddd, MMMM Do YYYY, h:mm:ss a")} UTC`, inline: true },
            {name: `User creation date`, value: `` + `${moment.utc(target.createdAt).format("dddd, MMMM Do YYYY, h:mm:ss a")} UTC`, inline: true},
            {name: `Badges`, value: `` + flags, inline: true}
         
          )
    message.channel.send({embeds: [embed]})
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:12:02