discord.py on_member_update事件获取成员游戏活动异常:返回自定义状态而非目标游戏活动
解决discord.py中on_member_update获取游戏活动的问题
我懂你碰到的情况了——after.activity默认只会返回Discord优先级最高的活动,而自定义状态(CustomActivity)的优先级是高于游戏游玩(Playing)活动的,所以你直接拿after.activity得到的是自定义状态,而不是你想要的游戏信息。
从你打印的after.activities结果能看到,这个属性是一个包含所有当前活动的列表,里面既有自定义状态,也有你要找的游戏活动(类型是ActivityType.playing)。所以正确的做法是遍历这个列表,筛选出类型为playing的活动。
修正后的代码示例
from discord import ActivityType @client.event async def on_member_update(before, after): # 遍历用户的所有活动,筛选出游戏游玩类型的条目 for activity in after.activities: if activity.type == ActivityType.playing: # 输出游戏名称 print(f"当前游玩的游戏: {activity.name}") # 输出游戏详情(比如模式等) if activity.details: print(f"游戏详情: {activity.details}") # 如果需要其他属性,比如应用ID也可以直接获取 if activity.application_id: print(f"游戏应用ID: {activity.application_id}") # 如果只需要第一个游戏活动,这里可以加break;如果要处理多开的情况就去掉 break
额外说明
- 如果用户同时开启了多个游戏(虽然这种情况不多见),去掉
break就能遍历并处理所有符合条件的游戏活动。 - 部分游戏可能不会返回
details、application_id这类附加信息,所以访问的时候最好先做非空判断,避免抛出AttributeError。
内容的提问来源于stack exchange,提问作者buga
相关产品推荐
相关产品推荐

