如何使用PHP获取Discord服务器总成员数?附代码及问题说明
<?php $json_options = [ "http" => [ "method" => "GET", "header" => "Authorization: Bot xxxxxxxxxxxxxxxxxxxxxxxx" ] ]; $json_context = stream_context_create($json_options); $json_get = file_get_contents('https://discordapp.com/api/guilds/111111111111111/members?limit=1000', false, $json_context); $json_decode = json_decode($json_get, true); echo '<h2>Member Count</h2>'; echo count($json_decode); echo '<h2>JSON Output</h2>'; echo '<pre>'; print_r($json_decode); echo '</pre>'; ?>
问题排查与解决方法
一、401错误修复方案
401错误属于身份验证/权限校验失败,按以下顺序排查即可:
- 进入Discord开发者后台的Bot管理页,找到「Privileged Gateway Intents」板块,开启Server Members Intent,该权限是调用成员列表接口的强制前置要求
- 确认Bot在目标服务器内被分配了
查看成员(View Members)权限 - 检查请求头格式:
Authorization字段中Bot关键词后必须保留1个空格,令牌内容不要填写错误 - 更新API配置:将接口域名从
discordapp.com改为discord.com,同时建议在请求头中添加X-Discord-Bot-Version: 10指定使用v10版本API,避免旧版本接口的兼容限制
二、无法获取总成员数的解决方法
你当前调用的/guilds/{guild_id}/members接口默认存在1000条返回上限,若服务器成员超过1000人,直接统计返回数组长度必然不准确,推荐两种适配方案:
方案1(优先推荐,无需拉取全量成员)
直接调用服务器基础信息接口获取总成员数,接口地址为https://discord.com/api/guilds/你的服务器ID,返回结果中approximate_member_count字段即为全服总成员数,无需额外权限,调用效率更高,也不会触发成员拉取的限流规则。
代码修改示例:
$json_options = [ "http" => [ "method" => "GET", "header" => [ "Authorization: Bot 你的Bot令牌", "X-Discord-Bot-Version: 10" ] ] ]; $json_context = stream_context_create($json_options); $json_get = file_get_contents('https://discord.com/api/guilds/111111111111111', false, $json_context); $json_decode = json_decode($json_get, true); echo '服务器总成员数:'.$json_decode['approximate_member_count'];
方案2(需要全量成员数据时使用)
如果确实需要拉取全量成员列表,使用after参数分页拉取:每次拉取1000条后,将最后一条成员的ID作为after参数传入下一次请求,直到返回结果为空,再统计所有返回的成员总数即可。
内容的提问来源于stack exchange,提问作者Ugniusnaujas Ugnius
相关产品推荐
相关产品推荐

