Discord API 通过public_flags获取用户徽章列表(JS非discord.js环境)
实现方案
核心原理
Discord返回的public_flags是32位整数类型的位运算字段,每个徽章对应一个独立的比特位,通过按位与运算即可判断用户是否持有对应徽章,无需依赖discord.js等第三方库。
完整代码实现
// 徽章与对应位掩码的映射表 const DISCORD_BADGE_FLAGS = { "Discord Employee": 1 << 0, "Partnered Server Owner": 1 << 1, "Hypesquad Events": 1 << 2, "Bug Hunter Level 1": 1 << 3, "House Bravery": 1 << 6, "House Brilliance": 1 << 7, "House Balance": 1 << 8, "Early Supporter": 1 << 9, "Team User": 1 << 10, "Bug Hunter Level 2": 1 << 14, "Verified Bot": 1 << 16, "Early Verified Bot Developer": 1 << 17, "Discord Certified Moderator": 1 << 18, "Bot HTTP Interactions": 1 << 19, "Active Developer": 1 << 22 } /** * 从public_flags字段提取用户徽章列表 * @param {number|null|undefined} publicFlags 从Discord API获取的用户public_flags字段值 * @returns {string[]} 用户持有徽章的名称数组 */ function getUserBadges(publicFlags) { if (!publicFlags) return [] const badges = [] for (const [badgeName, flagMask] of Object.entries(DISCORD_BADGE_FLAGS)) { if ((publicFlags & flagMask) !== 0) { badges.push(badgeName) } } return badges }
使用示例
你从Discord用户接口拿到用户数据后,直接传入public_flags字段即可:
// 示例:从Discord API返回的用户数据 const discordUser = { id: "xxx", username: "xxx", public_flags: 4325440 // 对应示例输出的组合值 } const userBadges = getUserBadges(discordUser.public_flags) console.log(userBadges) // 输出:["House Bravery", "Partnered Server Owner", "Early Verified Bot Developer"]
内容的提问来源于stack exchange,提问作者ThinLiquid
相关产品推荐
相关产品推荐

