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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:04