#
#
只要有任何编程基础(没有应该也行?)就能看得懂因为我自己也是萌新(
# 失败记录
[!CAUTION]
这一段是一开始用 mirai 搭的笔记,搭一半的时候发现登录问题解决不了,去搜了半天最后发现都去用 onebot 了..... 于是临时改变了实现方案
但还是把这段留着吧
参考文章和博客地址:
mamoe/mirai: 高效率 QQ 机器人支持库(mirai 官方项目地址)
mirai 官方文档
Mirai | 数据消散 Wiki
【QQ 机器人】给纯新手的通俗易懂安装教程,长期接受评论私信答疑 [基于 mirai](上) - 哔哩哔哩
寒假完全没学习的欲望,但也得找点事情做不能天天刷手机了(
很早之前就想自己整一个 maimai 的 bot,但一直没什么时间加上自己太懒了,刚好现在来弄一下,顺便写个 blog 做记录。自己对这方面是 0 基础,简单搜了一下打算用 mirai 来搭建,不知道有没有更好的方案,先以这个入门吧
# 安装 MCL
MCL 即纯控制台的 Mirai Console 启动器(Mirai Console Loader),可以在其 Github 项目地址里面下载。也有图形界面版本,但是那个不太稳定,所以这里用 MCL。我这里下的版本为

中的 [mcl-installer-ae9f946-windows-x86.exe](https://github.com/iTXTech/mcl-installer/releases/download/ae9f946/mcl-installer-ae9f946-windows-x86.exe)
安装的时候有两个选项确认
- 是否安装 Java 环境
- 确认安装 MCL
如果你跟我一样电脑里有 Java 环境,第一条就别下了,不然可能会出现版本冲突之类的问题,没有的话就输入 Y 下一个

安装完是这样的

然后运行 mcl.cmd,应当直接安装成功的。但这里我始终报错,然后崩掉
1 | 15:38:42 [ERROR] Failed to fetch announcement for "org.bouncycastle:bcprov-jdk15on" |
总之就是 org.bouncycastle:bcprov-jdk15on 这玩意下载失败,换代理换热点都没用。然后又是一顿乱搜,找到了解决办法,似乎是原来的 mcl 更新源出问题了
打开文件夹里面的 config.json 配置文件,找到 mirai_repo ,把它改成 https://mcl.repo.mamoe.net/ 就行
这里底下的 maven_repo 默认应该是阿里的镜像源,由于我基本上一直挂着梯子,就顺手给它改成了官方源(不知道这个不改会不会出问题)
然后再试试,成了

到这里为止 MCL 就算是安装完成了,这个东西仅仅是一个启动器,本身不带有其它功能。要实现其他功能还需要装很多相应的插件。文件夹中的各个文件表示的内容如下:
将插件 JAR 放在 plugins 目录中,重启 Mirai Console 就会自动扫描并加载
# 基本命令及插件
输入 /help 或者 help 查看命令,一些基本必要命令如下( <> 为必填参数, [] 为选填):
- 所有以 /autoLogin 开头的为自动登录相关配置
- /login <qq> [password] 登录一次此 qq 号
- 所有以 /permission 开头的为权限配置,简写为 /perm
- /stop 退出程序,建议使用此方法退出 MCL 而不是直接点窗口的叉号,直接点叉号关闭会导致一些关闭时的存储数据功能不被运行,会影响使用
mirai 属于模块化开发,本身不提供任何功能,要实现对应的功能就得去找插件
Mirai 官方只提供两个插件:
- chat-command: 允许在聊天环境通过以 "/" 起始的消息执行指令(也可以配置前缀)
- mirai-api-http:提供 HTTP 支持,允许使用其他编程语言的插件
这里以这两个插件为例,学习一下安装和使用插件
打开 PowerShell,可以使用 MCL 自动安装这些插件,例如:
安装 mirai-api-http 的 2.x 版本:
1 | ./mcl --update-package net.mamoe:mirai-api-http --type plugin --channel maven-stable |
安装 chat-command:
1 | ./mcl --update-package net.mamoe:chat-command --type plugin --channel maven-stable |
好像已经装过了。。

注意:插件有多个频道, --channel maven-stable 表示使用从 maven 更新的 stable (稳定)的频道。不同的插件可能会设置不同的频道, 具体需要使用哪个频道可参考特定插件的说明 (很多插件会单独说明要如何安装它们,因此不必过多考虑)。
社区插件在 mirai 官方论坛找:插件发布 | MiraiForum
# 正文
# 前置知识
搞 mirai 的时候还在疑惑,为什么搜到的教程都是三四年前的。。。。最后发现 mirai 项目已经停止维护了,现在甚至登录签名校验也很麻烦,而且大部分开发者也在迁移到 OneBot 生态
不过这一下午也没白费,算是了解了一下 QQ 消息发送的一些机制,也能明白自己到底要干什么了,这里先简单给出来用户和机器人交互的简图:
1 | 用户 |
设想一下两个人正常地用 QQ 聊天,假设 A 是用户,B 是我们部署好的机器人,A 给 B 发送消息” 你好 “,那么:
” 你好 “会先被发送到 qq 服务器,然后 qq 服务器再把包含” 你好 “的一段数据结构返回给 B,注意这里返回的实际上是一段数据结构,并不仅仅是一个字符串消息,那么这里就涉及到了第一个我们插入的元素:” 协议实现 “,常见的协议实现如下
- NapCat
- Lagrange
- mirai-core
协议实现实际上就是伪装成了一个 qq 客户端,和 QQ 服务器保持 长连接,负责解析数据结构成某种格式。这个特定的格式就称为 OneBot 标准,然后通过 WebSocket 或 HTTP POST 给后端,这个后端就是逻辑部分,可以自己写,也可以看看有没有大佬写过了,如果有直接装插件就行( 然后机器人回复用户就是逆向一下
按照后端那边的分层标准的话,这里的 bot 系统其实也可以分成三层:
① 协议层
负责:
- 登录
- 收发消息
- 过风控
例如:
- NapCat
- Lagrange
② 标准接口层
负责:
- 统一收发消息格式
例如:
- OneBot
③ 业务层
负责:
- 指令解析
- 自动回复
- 数据库
- 功能逻辑
例如:
- AstrBot
- 自己写 SpringBoot
# 安装 Astrbot
使用 Windows 一键安装器部署 AstrBot | AstrBot
照抄没遇到错误,比上面的 mirai 好多了。。。
# 部署 bot
正确安装后在 webUI 里面创建机器人,这里我 OneBot v11 和 QQ 官方 WebSocket 两种方式都试了一遍
# OneBot 方式
用的是 NapCat 作为协议实现,看看官方文档:使用 NapCat | AstrBot。或者说是这里:Shell | NapCatQQ。跟着来就行,没什么 bug
唯一要注意的地方(不会只有我犯蠢吧....)就是这里的 launcher_astrbot_en.bat 别删了,这就是启动器(一开始我以为这是安装程序来着,运行完就删了)
然后接入 astrbot,参考官方文档:接入框架 | NapCatQQ 和使用 NapCat | AstrBot

以防有人跟我一样不知道 NapCat 的 WebUI 地址是多少找了半天。。(就在运行 launcher.bat 的命令行最上面那一部分)

然后照抄就成了
# QQ 官方 WebSocket 方式
# 加载 maimai 查分插件
经过前面几步已经搭建出来一个 bot 了,但要实现相应的功能还得添加一些插件,仪表盘里面就有插件市场
巧合的是居然就有查分的插件( 不用自己写代码去对接水鱼 api 了,项目地址:ZhiheZier/astrbot_plugin_maimaidx,下载下来的插件在 data/plugins 目录下,跟着文档操作就行(必看插件文档,不然会报错的)