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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:35:22