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
相关产品推荐
相关产品推荐

