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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:57:38