返回博客

AstrBot / Scheduler / Game Tools

游戏紧急任务播报插件的抓取、解析与分阶段推送

记录 PSO2 NGS 播报插件中的页面解析、时区换算和推送去重。

游戏活动播报插件需要把外部页面上的时间信息转成聊天窗口里的提醒。页面结构可能变化,任务标题需要本地化,提醒还要避免重复发送。

项目概览

结构上,jpnn_client.py 拉取来源页面,jpnn_parser.py 解析播报内容,models.py 定义快照和条目,plugin_store.py 保存抓取与推送状态,message_dispatcher.py 生成消息,card_renderer.py 输出图片卡片,main.py 负责轮询和群命令。

用途是把游戏紧急任务、运营公告和跨语言标题转换成聊天提醒。应用场景包括游戏社群活动提醒、公告转发和跨时区任务提示。

抓取与解析

插件定时抓取外部页面,解析任务标题、开始时间、持续时间和区域信息。解析结果先转换成标准时间,再由渲染层显示本地时间。标题映射表负责把外部名称转换成更适合群聊阅读的中文标题。

每个任务生成签名,签名由标题、时间和阶段组成。插件保存已发送签名,重启后仍能避免重复播报。

分阶段提醒

任务提醒分成预告、开始、进行中和结束几个阶段。调度器按当前时间计算阶段状态,并根据配置决定是否发送文本或图片卡片。图片渲染失败时,文本输出作为后备。

实现原理是定时轮询外部页面并生成快照。快照中的条目通过签名去重,阶段变化触发推送,渲染层按目标输出文本或图片卡片。标题映射和时区转换在消息生成阶段完成,避免存储层混入展示逻辑。