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

如何用PHP解析Discord API的public_flags获取用户真实徽章名称

核心原理

Discord的public_flags字段采用位掩码存储规则,每个徽章对应唯一2的幂次枚举值,多个徽章的枚举值做位或(或求和,因为无重叠位)后返回。反推时只需通过**按位与运算(&)**判断对应二进制位是否为1,即可确定用户是否持有对应徽章。

完整PHP实现代码
<?php

/**
 * 解析Discord public_flags为徽章名称组合
 * @param int $publicFlags 接口返回的public_flags数值
 * @return string 拼接后的徽章名称
 */
function getDiscordBadges(int $publicFlags): string
{
    // 徽章枚举值与显示名称映射,后续新增徽章仅需在此补充对应键值对即可
    $badgeMap = [
        1 => 'Discord员工',
        2 => '合作服务器所有者',
        4 => 'HypeSquad活动成员',
        8 => 'Bug猎手1级',
        64 => '勇气之家成员',
        128 => '智慧之家成员',
        256 => '平衡之家成员',
        512 => '早期支持者',
        16384 => 'Bug猎手2级',
        131072 => '早期认证机器人开发者'
    ];

    $matchedBadges = [];
    foreach ($badgeMap as $flagValue => $badgeName) {
        // 按位与运算判断是否持有当前徽章
        if (($publicFlags & $flagValue) === $flagValue) {
            $matchedBadges[] = $badgeName;
        }
    }

    return empty($matchedBadges) ? '无徽章' : implode(' & ', $matchedBadges);
}

// 测试示例:传入题目给出的public_flags值644
echo getDiscordBadges(644);
// 输出结果:HypeSquad活动成员 & 智慧之家成员 & 早期支持者
?>
验证说明

示例中的644可拆解为 4 + 128 + 512,刚好对应三个徽章的枚举值,和代码输出结果完全匹配,逻辑兼容所有徽章组合场景。

内容的提问来源于stack exchange,提问作者Matéo M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:03