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
相关产品推荐
相关产品推荐

