目录

再启程——考研分数统计机器人

一、前言

考研,是血淋淋的战场啊!知道自己的大概排名,才能尽快决定是准备复试还是调剂、找工作、二战。

但现在学校一般不公布考研分数排名,所以我写了一个基于 QQ 群名片的考研分数统计机器人

22年的时候,已经在计算机群内使用了,当时的博客见这里。今年,又「卷土重来」。

GitHub 传送门

二、一些吐槽

其实我本来想先写功能改进的,但是,tx的政策让我很难受,我必须先吐槽!

主要还是,风控策略加强了。以前能用账号密码登录机器人,最近运行的时候,发现每次登录都要扫码,并且需要扫码的手机和运行机器人的服务器在同一个网络环境内。所以巨麻烦。(进而导致我很多所谓的 feature,都是拜tx所赐,哭)

不过也能理解,防止机器人被滥用吧。(但是QQ频道机器人就挺完善的,能不能加个审核机制呢?)

(或许通过一些网络操作,比如把服务器和手机连到同一个子网里,就能绕过网络了。但我一直是网络菜鸡,再次大哭,恶补计算机网络中)

三、功能

功能点从大到小、从产品到技术来说吧。

3.1 回复图片

第一个版本,为了防止消息过多刷屏,所以把统计分数存到了 web 服务器上,然后把查询网址发了出来。

然后我看到今年有个研究生新生,把我的网站查询结果「截图」发了出来,我就想,能不能直接把文字转成图片呢?最终效果是这样:

效果展示

(用到了 Go 的文字转图片,以及 Mirai 的图片发送)

3.2 二维码广告

考研分数排名查询,每天的查询次数非常大,换言之,流量巨大。流量又对应着什么?广告位!

(当然不是指那种谷歌广告收入,而是帮实验室宣传啦)

于是加了个功能,可以在回复的图片后面,再拼接一张自定义的二维码,比如实验室招新群。(这里最难的点在于,需要通过文字大小、行高等来算出前面的文字的总高度是什么,进而得到二维码的坐标)

3.3 平均分/中位数

没啥好说的,就是对每个分组加了些计算。(改这里的时候,发现自己以前写这块的时候比较懒,有一部分copy了,然后坑了自己一把。所以小小重构了一下。同时也发现,每过半年看自己的代码,总觉得自己以前的代码怎么这么烂。)

3.4 更多的配置

把大部分内容都弄成可配置的。比如字体文件、二维码图片、前缀后缀文字等。

以及把 README 写地更详细了(以传承给下一届哈哈哈)。

3.5 支持 Remote-Server

背景是,为了防止消息过长,我会把计算结果存到一个 web 服务器上(直接附在机器人程序里,我称之为 Local-Server),然后把查询网址发给同学们。

但因为tx加强了风控(必须在同一网络下扫码),导致我的机器人无法部署在服务器,只能找个电脑部署。但我选取的那个电脑所在的组织又坚决不允许搭建内网穿透,导致用户无法访问 Local-Server。

所以我需要把查询结果存到某个地方,再起一个服务器放在公网,暴露出来供用户访问。

最简单/高大上 的操作,我能想到的就是查询结果存到 Workers 的 KV,再利用 cloudflare 的 Workers 做查询。(但是不熟,以及暂时弄不太明白 kv 的免费额度,读/写好像写得有点暧昧,具体记不得了)

然后还是选择了偷懒,又实现了一个简单的 Remote-Server,可以在外网机器启动 Remote-Server,然后在内网机器部署机器人,并配置好 Remote-Server 的地址。

当然,部署 Remote-Server 与否,都是可配置的。

3.6 使用 Go Releaser 自动发布

去年学得最多的估计就是 DevOps 了吧,而这个机器人的第一版刚好写于我在学习 DevOps 之前。就给它整上吧!

看起来大概是这样:

Release页