调用Discord API获取成员时遇401错误,如何排查解决?
解决Discord API 401未授权错误及获取成员数的修正方案
Authorization头格式错误:
Discord机器人Token的请求头必须以Bot前缀开头,你当前代码里直接写Authorization: token不符合规范,正确格式应为:"header" => "Authorization: Bot 你的机器人Token"注意
Bot后面有一个空格,替换为你实际的机器人Token。API端点域名过时:
旧的discordapp.com域名已被弃用,需替换为官方当前使用的discord.com,修正后的请求地址:'https://discord.com/api/guilds/SERVER-ID/members?limit=1000'开启服务器成员意图权限:
要获取服务器成员列表,机器人必须开启服务器成员意图(Guild Members Intent):- 登录Discord开发者门户,进入你的应用
- 切换到"Bot"页面,找到"Privileged Gateway Intents"板块
- 开启"Server Members Intent"开关
- 确保机器人已受邀加入目标服务器,且拥有
View Channel等基础权限
添加错误处理逻辑:
原代码未处理请求失败的情况,比如401错误时file_get_contents会返回false,导致后续count操作报错,建议补充判断:<?php $token = "你的机器人Token"; $serverId = "你的服务器ID"; $json_options = [ "http" => [ "method" => "GET", "header" => "Authorization: Bot {$token}", "ignore_errors" => true // 允许获取错误响应内容 ] ]; $json_context = stream_context_create($json_options); $json_get = file_get_contents("https://discord.com/api/guilds/{$serverId}/members?limit=1000", false, $json_context); if ($json_get === false) { echo "请求失败"; exit; } $json_decode = json_decode($json_get, true); if (isset($json_decode['code']) && $json_decode['code'] === 401) { echo "Token无效或权限不足"; exit; } echo count($json_decode); ?>
内容的提问来源于stack exchange,提问作者durov25
相关产品推荐
相关产品推荐

