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

Discord.py:用户活动状态与字符串比较时条件判断失效

问题解决:Discord.py游戏活动状态判断失效的原因与修复

你遇到的问题核心是类型不匹配:cur.activity不是字符串,而是Discord.py中的Activity对象。虽然打印它的时候会显示游戏名称(这是因为对象的__str__方法返回了活动名称),但直接拿对象和字符串做==比较,结果肯定是False,所以条件分支不会执行。

修复步骤:

  • 要获取游戏名称,必须访问Activity对象的name属性,也就是cur.activity.name
  • 额外注意:用户可能没有任何活动状态(此时cur.activity为None),所以先做非空判断,避免触发AttributeError

修正后的代码:

@client.event
async def on_presence_update(prev, cur):
    # 先检查是否存在活动,防止空对象报错
    if cur.activity is not None:
        print(cur.activity.name)
        if cur.activity.name == 'RimWorld':
            print('Playing RW')
            # 注意:原代码中的message变量未定义,需替换为实际发送渠道
            # 示例:通过频道ID获取频道对象,替换成你的目标频道ID
            target_channel = client.get_channel(1234567890)
            await target_channel.send(f'{cur.mention} is playing RimWorld, a colony simulation game.')

另外提醒:原代码里的message.send会报错,因为message变量没有定义,你需要根据需求替换成具体的发送目标——比如指定频道、私信用户等,上面的示例用了频道ID获取频道对象,你可以根据实际场景调整。

内容的提问来源于stack exchange,提问作者Ethan McClelland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:45:30