做一个能在群里随时开庭的守望先锋插件
朋友一句“这把我尽力了”,群里就能直接查战绩、看全员数据、开始复盘。这个插件最有意思的地方,从来不只是查询。
起因就是一句“我尽力了”
GitHub 仓库:wswayin/astrbot_plugin_owSearch
和朋友打守望先锋,输一局之后最常见的场面不是安静复盘,而是每个人都觉得自己多少有点委屈。
有人说自己一直在扛,有人说输出环境太差,也有人整局神出鬼没,结算时却能用非常坚定的语气宣布:“这把我尽力了。”
光靠嘴说,最后通常只剩印象流。我就想把战绩查询直接塞进群里,不用切网页,不用复制一串链接,BattleTag 一发,数据和图片马上端上来。到底是谁在坐牢、谁在逛街,先看完再聊。
查数据只是前菜,开庭才是正事
插件里我最常用、也最符合群聊气质的命令是:
/ow 开庭 玩家#12345
它会找出最近一场能分析的快速或竞技对局,依次发回个人战绩图、全员数据图和 AI 分析图。想翻上一场,就在后面加序号。
图片出来之后,群里自然会接管后半程。发挥好的人获得当庭表扬,数据离谱的人开始陈述客观原因,围观群众负责从伤害、承伤、治疗和英雄选择里寻找新证据。
后来又补了“同玩”查询。两个人一起排过哪些局、谁和谁在一起时胜率更像样,都能翻出来。它不一定能解决争论,但很擅长给争论续上新的材料。
真正麻烦的不是接口,是图片能不能看
一开始很容易觉得:数据拿到了,事情就完成了一半。真正放进群聊后才发现,一张图里只要缺了地图、英雄头像或中文字体,节目效果立刻从“开庭”变成“排查线上事故”。
这个项目后来迁入了 Overstats 的 Dashen 数据和渲染链路。正式查询前会预缓存当前对局用到的地图、英雄、头像和威能图标,尽量少出现白色占位;主战绩图缺少英雄标识时,也会尝试从已选威能反推英雄。
中文字体也是很现实的问题。Windows 本地看着正常,放进 Linux 或 Docker 里可能全变方框。所以插件会把实际加载到的常规字体和粗体字体放进 debug 信息里,至少出问题时不用靠猜。
AI 锐评可以挂,但不能装没挂
AI 分析只是第三张图,前两张数据链路不应该被它拖死。没有配置模型时,插件仍然会返回一张“AI 未配置”的提示图;遇到 429、503 或临时网络错误会短暂重试,持续失败就明确告诉群里是模型服务出了问题。
我不喜欢那种命令发出去后沉默半天,最后只回一句“生成失败”。群聊工具一旦没有反馈,大家很快就会把同一条命令再发三遍,然后问题从一个变成四个。
现在 AI 锐评的人设更像一个懂守望的毒舌评论员,但我还是希望它先讲得像那么回事,再考虑够不够损。纯粹把几个数字换种说法念一遍,没什么意思。
显式命令留着,自然语言也能用
目前主要能力已经注册成 AstrBot 的 LLM 工具。想直接说“帮我看看某某最近打得怎么样”可以交给 AstrBot 判断;想要稳定、可复现的结果,原来的 /ow ... 命令仍然全部保留。
我更喜欢两种入口并存。自然语言用起来轻松,显式命令则适合群里已经形成习惯之后直接开庭,也方便出问题时逐步排查。
README 里留下的联调顺序,基本就是这个项目踩坑后的生存路线:
/ow debug 配置
/ow debug ai
/ow debug 图片 玩家#12345
/ow debug 接口 玩家#12345 5
/ow debug 战绩 玩家#12345 5
/ow 开庭 玩家#12345
先确认配置,再拆接口、渲染和 AI。群聊插件最折磨人的不是报错,而是不知道错误到底在哪一层。
它也有很明确的边界
数据来自网易大神的公开战绩接口。玩家关闭公开资料、BattleTag 写错、token 过期或者上游调整,查询都会失败。角斗模式目前也拿不到完整的全员数据,所以开庭会跳过它,只选快速和竞技对局。
这些限制不太漂亮,但最好从一开始就说清楚。这个插件毕竟不是官方数据源,它做的是把已有数据整理成群里看得懂、愿意看的东西。
说到底,我想做的也不是一个功能最多的守望先锋查询器。朋友打完一局,不用散会去翻网页,群里直接多出十分钟很有内容的互相审理——做到这一点,它就已经值回票价了。