音游查分插件装上了,但数据从哪来
想给群里的音游玩家加个查分功能。找了个现成的插件装上——但装上之后它没数据。
查分插件的结构和我一开始以为的不一样:插件只是个前端,真正去官方服务器拉成绩的是另一个服务,叫"查分后端"。
为什么要自己跑一个后端
游戏官方的成绩数据不对外开放接口。想让机器人查到某个玩家的成绩,得有人先跟官方服务器通信、把数据取回来、再用一套 API 对外提供——这就是查分后端干的事。
社区里有开源实现,装到自己的服务器上就行。代价是:这部分得自己维护。
部署很标准:装到 /opt/ 下,写个 systemd 单元(arcaea-server.service),监听一个端口,开机自启。
配上密钥
服务跑起来之后,还要处理认证。
后端有个管理用的 API_TOKEN,配在它的配置文件里。这个管理员令牌是用来做管理操作的——插件查分不能用它,得给插件单独注册一个账号,拿它自己的令牌。
流程是:
- 用管理员令牌注册一个用户
- 拿到那个用户的令牌
- 把这个令牌填进插件配置
中间还要确认一件事:注册出来的用户是什么角色。 权限不够的话,接口会拒绝——表现是插件又查不到数据,但这次的原因和"后端没起来"完全不同,得能分辨。
排查顺序
这类"插件查不到数据"的问题,其实有一串独立的失败点:
- 后端进程活着吗?(
systemctl status) - 端口通吗?(从容器里 curl 一下)
- 令牌对吗?(拿令牌直接打接口)
- 令牌权限够吗?
从下往上排,一层层确认。 我犯过一次错,是直接跳到第 4 步去查权限,结果发现卡在第 1 步——后端压根没起来。
一个细节:容器和宿主机
插件跑在 docker 容器里,查分后端跑在宿主机上。
容器里访问宿主机,不能用 127.0.0.1——那指向容器自己。要用宿主机的 docker 网关地址(通常是 172.17.0.1 或类似),或者用 host.docker.internal。
这个我踩过一次:后端明明活着、宿主机上 curl 通,但插件就是连不上。原因是"通不通"这件事,要看是从哪台机器上测的。
顺带说,那个后端刚部署完,访问它的根路径会返回一个 hello world——这是正常的,它在告诉你"我活着",不代表它能查分。