如何准确检测用户正在玩的游戏而非其自定义状态
本教程详解如何在 Discord.py 中正确监听用户“正在玩游戏”事件,避免因自定义状态干扰而误报;核心在于遍历 activities 列表并精准匹配 ActivityType.playing 类型。
本教程详解如何在 discord.py 中正确监听用户“正在玩游戏”事件,避免因自定义状态干扰而误报;核心在于遍历 `activities` 列表并精准匹配 `activitytype.playing` 类型。
Discord 用户可同时拥有多种活动(如:自定义状态、正在听 Spotify、正在玩某款游戏),这些活动统一存储在 member.activities(一个元组)中,而非仅通过 member.activity 单一属性暴露。你原始代码中使用 after.activity 仅获取首个活动(通常是优先级最高的自定义状态或在线状态),因此当用户设置了自定义状态时,activity.name 就会返回该状态文本,而非游戏名——这正是问题根源。
✅ 正确做法是遍历 after.activities,逐一判断每个活动的 type 是否为 discord.ActivityType.playing:
@client.event
async def on_presence_update(before, after):
# 遍历所有当前活动(包括游戏、音乐、自定义状态等)
for activity in after.activities:
if activity.type == discord.ActivityType.playing:
game_name = activity.name or "Unknown Game"
# 使用 f-string 提升可读性,并避免 None 引发异常
log_msg = f"{before.name} is now playing {game_name}"
print(log_msg)
# 安全获取系统频道(推荐指定 guild 而非硬编码 client.guilds[0])
guild = after.guild
if guild and guild.system_channel:
await guild.system_channel.send(log_msg)
break # 找到第一个游戏即停止,避免重复通知(同一用户通常只运行一个游戏)
⚠️ 关键注意事项:
- 必须启用 intents.presences = True(你已正确配置),否则 activities 始终为空;
- before.name 在跨服务器场景下可能不准确(应优先用 before.display_name 或结合 guild.get_member() 获取上下文成员);
- after.activities 是只读元组,长度可能为 0(如用户仅设置“离线”或“空闲”且无活动);
- 若需支持多游戏通知(极少见),可移除 break 并去重处理;
- 生产环境建议添加异常捕获(如频道不可发送、权限不足)及日志级别控制。
? 进阶提示:若需区分“首次启动游戏”(而非每次状态刷新),可缓存用户最近记录的游戏名,仅在 game_name != cached_game 时触发通知,避免高频重复推送。
通过此方案,无论用户是否设置了自定义状态、听歌或直播,你的 Bot 都能稳定、精准地捕获其真实游戏行为,大幅提升通知可靠性与用户体验。
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
《电竞经理2026》自定义选手教程分享
2026-07-11《电竞经理2026》中的自定义选手是游戏里非常有趣的事情,当你想要某种特质的选手,但其他属性你又不太满意的时候就可以自定义选手,我们可以先来到一个网站,就在主菜单那里,我们需要点击数据库。 电竞经理2026怎么自定义选手 本文内容来源于互联网,如有侵权请联系删除。
《最终幻想7:启示》总监解释为何坚持使用UE4而非UE5开发
2026-06-23近日《最终幻想7:启示》制作人滨口直树接受4Gamer采访,谈及为何本作仍坚持使用虚幻4引擎开发,而非使用功能更强大的虚幻5引擎。 滨口直树称由于前两作《最终幻想7:重制版》和《最终幻想7:重生》均使用虚幻4开发,改用虚幻5意味着更长的开发周期,无论从商业角度还是玩家角度来看这都不合理。他希望能尽快让玩家玩到这款游戏。 滨口直树说:“就该系列而言,无论从商业还是玩家角度出发,我认为尽快推出游戏是最...
《漫威金刚狼》内置自定义选项 可主动和谐血腥效果
2026-06-22InsomniacGames《漫威金刚狼》将带来前所未有的残酷暴力,但玩家可以自行决定屏幕上显示的血腥程度。在本月的Stateof Play直播活动中,工作室发布了一段实机宣传片,随后确认《漫威金刚狼》将包含丰富的暴力自定义选项。 游戏中有专门的辅助功能设置,通过一套精细的过滤系统来处理血腥画面: 玩家可以完全关闭动态血液飞溅效果,并在游戏过程中禁用断肢效果 过场动画也采用了类似处理方式,通过自定...
《宝可梦Pokopia》DLC新情报曝光:服装自定义系统或将登场
2026-06-19据《宝可梦Pokopia》付费DLC扩展包的数字下载卡图片显示,该游戏即将推出的三部曲扩展内容中,或将引入一项令玩家期待的全新功能——宝可梦服装自定义系统。 《宝可梦Pokopia》的付费DLC于上周的任天堂直面会上正式公布,与此同步上线的还有面向所有玩家的免费更新,后者将新增一片可探索区域并引入水下探索机制。DLC共分为三部分,首弹内容定于2026年8月正式推出。 随着首弹DLC发售日的临近,各...
迷你世界怎么自定义地图封面图片
2026-06-13首先在迷你世界开始界面,点击开始游戏,然后选择一款需要修改地图封面的游戏,点击单人游戏,进入游戏后,找一个喜欢的游戏视觉,然后调出设置界面,点下存档封面的照相机图标,就可以将现在游戏窗口界面自定义为游戏封面。 详细答案: 首先在迷你世界开始界面,点击开始游戏。 然后选择一款需要修改地图封面的游戏。 点击单人游戏。 进入游戏后,找一个喜欢的游戏视觉。 然后调出设置界面,点下存档封面的照相机图标,就可...
迷你世界如何装备自定义
2026-06-07首先创建一张地图,点击上方插件按钮,并进入道具页面;之后点击添加,并点击新建按钮新建插件,找到创建新道具,总之不断的点击“加号”样式的按钮即可,之后你会看到道具类型最后多出了一个装备类型;这个就是新增的自定义装备功能。 详细答案: 首先创建一张地图,点击上方插件按钮,并进入道具页面; 之后点击添加,并点击新建按钮新建插件,找到创建新道具,总之不断的点击“加号”样式的按钮即可,之后你会看到道具类型最...
我的世界怎么设置自定义按键
2026-06-07我的世界设置自定义按键方法:1、点击“Esc”就会出现4个按键;2、点击“设置”这个按键;3、点击“键盘和鼠标”,你就可以在下图右侧窗口如图的位置自定义按键。 详细答案: 1、点击“Esc”就会出现4个按键,如图: 2、点击“设置”这个按键,如图: 3、点击“键盘和鼠标”,你就可以在下图右侧窗口如图的位置自定义按键。 本文内容来源于互联网,如有侵权请联系删除。
五笔打字练习软件键盘布局不习惯?自定义键位映射与个性化设置【技巧】
2026-06-04五笔练习软件键位不适应需重映射:金山打字通2024版支持图形化拖拽或编辑keymap文件;极点五笔插件提供三种预设布局快捷切换;系统级可用PowerToys键盘管理器全局重映射。 五笔打字练习软件键盘布局不习惯,导致击键错误率高、肌肉记忆混乱,甚至放弃练习——这不是输入法问题,而是键位映射未适配你手指的自然落点和旧有习惯。 确认当前五笔练习软件是否支持键位重映射 打开软件主界面,点击右上角齿轮图标...
五笔打字练习软件如何导入自定义文章?针对性练习工作常用稿件【方法】
2026-06-04金山打字通支持导入本地TXT文件练习五笔:进入【五笔打字】→【文章练习】→【课程选择】选【自定义课程】→用【导入txt文章】或复制粘贴方式加载文件→命名保存即可。 想用五笔打字练习软件练自己写的会议纪要、合同条款或日报模板,但找不到导入入口?金山打字通支持直接加载你本地的TXT文档,无需转换格式,也不用一行行粘贴。 进入文章练习模块 启动金山打字通→点击顶部菜单【五笔打字】→在二级界面中找到并点击...
如何修复Python aiohttp请求时出现的ClientPayloadError?
2026-06-04ClientPayloadError表明服务端提前关闭连接,非客户端代码错误;常见于服务端超时、拒绝大响应或代理截断,需通过抓包、检查响应头、服务端日志及添加读取超时和异常处理来定位解决。 ClientPayloadError通常意味着服务端提前关闭了连接 这个错误不是客户端代码写错了,而是aiohttp在读取响应体时发现服务端已经断开了连接。常见于服务端超时、主动拒绝大响应、或代理/网关(如Ng...
