Steam 内容推送插件需要处理多类来源:官方新闻、创意工坊更新、限时免费活动。不同来源的数据结构差异较大,因此插件把抓取、规整、去重和渲染拆成独立模块。
项目概览
项目仓库:DearCrazyLeaf/astrbot_plugin_steam_updates。
项目以主实现文件为核心,配合 appid_map.json、字体资源、配置 schema 和测试。用途是轮询 Steam 新闻、创意工坊更新和限时免费活动,并推送文本或图片卡片。
应用场景包括游戏群更新提醒、MOD 作者更新追踪、限免活动提醒和多游戏订阅管理。
多来源抓取
官方新闻优先使用 Steam News API,失败时使用 Feed 作为后备。创意工坊通过 PublishedFileID 查询更新信息。限时免费游戏来自活动页面解析,统一转成标题、时间、封面和链接结构。
每个来源都有独立的上次检查时间和去重集合。这样某一类来源异常时,其余来源仍可继续推送。
渲染与整理
消息输出支持文本和卡片两种形式。图片预取模块负责下载封面并做大小限制,LLM 整理模块负责把较长的更新说明压缩成适合聊天窗口阅读的摘要。
时区显示统一在渲染层处理,数据层只保存标准时间,避免不同来源混用本地时间带来的判断错误。
实现原理是为每个来源维护独立状态文件。抓取结果进入统一条目结构,再经过去重、摘要、封面预取和渲染。Pillow 卡片渲染用于承载标题、时间、封面和摘要,文本模式作为低依赖后备。