使用Python Requests获取Discord服务器成员列表时遇50001错误求助
解决Discord API获取成员列表返回Missing Access(50001)的问题
问题本质
你遇到的50001 Missing Access错误,核心原因是你的认证令牌对应的账号,在目标服务器中缺少获取成员列表的权限——读写消息的权限和查看成员的权限是相互独立的,前者不自动包含后者。
排查与解决步骤
1. 检查服务器角色权限
对于用户账号(非机器人),要获取服务器成员列表,必须拥有服务器的查看成员权限:
- 进入目标服务器,打开「服务器设置」→「角色」
- 找到你账号对应的角色(包括@everyone默认角色)
- 确认该角色已开启「查看成员」权限(在服务器权限分类下)
2. 注意API端点的权限限制
你调用的/guilds/{guild_id}/members端点有严格的权限要求:
- 如果是用户令牌:默认仅能获取你所在语音频道的成员;要获取全服务器成员,账号必须是服务器管理员,或拥有管理员权限
- 如果是机器人令牌:需要给机器人分配
GUILD_MEMBERS权限(邀请机器人时勾选该权限,或在服务器角色中配置),且授权头格式必须为Bot YOUR_BOT_TOKEN
3. 令牌类型适配
如果使用的是用户令牌且无法获取管理员权限,建议改用机器人令牌:
- 在Discord开发者平台创建机器人应用,邀请机器人到目标服务器并授予
GUILD_MEMBERS权限 - 修改授权头为
'authorization': f'Bot {你的机器人令牌}'
修正后的示例代码(支持分页)
Discord成员列表接口默认返回1000条数据,需要分页获取全量成员,以下是适配后的代码:
import requests import hide # 根据令牌类型设置授权头 auth_header = f'Bot {hide.bot_token}' if hide.use_bot_token else hide.user_token headers = {'authorization': auth_header} base_url = 'https://discord.com/api/v10/guilds/{}/members?limit=1000' all_members = [] last_member_id = None while True: request_url = base_url.format(hide.guild_id) if last_member_id: request_url += f'&after={last_member_id}' response = requests.get(request_url, headers=headers) if response.status_code != 200: print(f"请求失败: {response.json()}") break batch_members = response.json() if not batch_members: break all_members.extend(batch_members) last_member_id = batch_members[-1]['user']['id'] print(f"共获取到{len(all_members)}个服务器成员")
额外提醒
- 切勿泄露你的Discord令牌,无论是用户令牌还是机器人令牌,泄露会导致账号/机器人被恶意使用
- 建议使用最新的Discord API版本(当前稳定版为v10),替换你代码中的
v9为v10以获得更好的兼容性
内容的提问来源于stack exchange,提问作者lım
相关产品推荐
相关产品推荐

