如何用Python调用Discord API获取指定用户的活动与状态
通过Python调用Discord API获取指定用户的活动与状态
你的代码调用的/activities接口返回的是批量用户的活动记录摘要,并非单个用户的完整活动状态,所以输出和预期的包含details、state等字段的格式不符。要实现目标,需要调用正确的接口并指定目标用户。
问题根源
/api/v9/activities接口仅返回精简的活动记录列表,不包含你需要的详细活动字段- 获取单个用户的完整活动状态,需要使用机器人账号(用户token调用API违反Discord服务条款),且机器人需具备相应权限并加入目标用户所在服务器
解决方案
准备工作:
- 在Discord开发者门户为机器人开启
Presence Intent和Server Members Intent权限 - 确保机器人已加入目标用户所在的服务器
- 使用机器人token,格式为
Bot 你的机器人token
- 在Discord开发者门户为机器人开启
示例代码:
import requests # 替换为你的机器人token(注意前缀"Bot ") TOKEN = "Bot YOUR_BOT_TOKEN" # 替换为目标用户ID和其所在的服务器ID USER_ID = "TARGET_USER_ID" GUILD_ID = "TARGET_GUILD_ID" BASE_URL = "https://discord.com/api/v9" headers = {"Authorization": TOKEN} # 调用服务器成员接口获取用户详细信息(含活动状态) response = requests.get(f"{BASE_URL}/guilds/{GUILD_ID}/members/{USER_ID}", headers=headers) if response.status_code == 200: member_info = response.json() # 提取并格式化活动数据 for activity in member_info.get("activities", []): target_activity = { "details": activity.get("details"), "state": activity.get("state"), "name": activity.get("name"), "type": activity.get("type"), "url": activity.get("url") } print(target_activity) else: print(f"请求失败:状态码{response.status_code},内容:{response.text}")
补充说明
- 若无法获取服务器ID,推荐使用Discord网关(Gateway)连接,监听
PRESENCE_UPDATE事件获取实时活动状态 - 活动
type字段对应类型:0=游戏,1=直播,2=听歌,3=观看,4=自定义状态,5=竞赛
内容的提问来源于stack exchange,提问作者Zen35X
相关产品推荐
相关产品推荐

