使用koishi搭建一个高可连接本地数据库的QQ机器人
搭建一个QQ机器人需要准备一下内容:
- 一台可长时间运行的电脑(不需要公网ip)
- 一个等级不太低的小号
- 可稳定拉取docker的环境
- python环境
其中,python环境用于后端处理数据,非必要。如果你有scratch拼图能力的话,或许可以不需要外挂后端。
整个过程分为:
- 选择你的机器
- 搭建NapCat容器
- k搭建koishi容器
- 连接koshi和NapCat
- 下载并编写blockly插件
- (可选)使用自己的后端处理数据
选择你的机器
NapCat需求
机器的选择没有特定操作系统,NapCat和koishi都有对应的windows版本,官方文档:Shell | NapCatQQ
不论是windows还是linux或者macos,都有对应的安装指导:
- windows
NapCat.Win.一键版本
特殊说明: 一键版仅适用 Windows.AMD64 无需安装 QQ 和 NapCat 已内置
1.前往 NapCatQQ 的 Releases 页面 下载 NapCat.Shell.Windows.OneKey.zip 无头绿色版本解压
2.点击 NapCatInstaller.exe 等待自动化配置
3.进去 NapCat.XXXX.Shell 目录
4.启动 napcat.bat
对应的 NapCat.Shell.Windows.OneKey.zip 启动后 自动化部署一键包(此包仅适用 Windows)
- linux推荐使用docker安装
NapCat.Docker - Linux容器化部署
仓库地址: NapCat.Docker
除了常规的 docker run 样式的安装方法,此方法支持 compose 一键模板部署 astrbot, koishi, nonebot 详细参考 Readme 处 一键模板化配置 部分
- macos
NapCat.MacOs - MacOs安装工具
前往下载
需要 MacOS 12.0 或以上系统,支持下载和更新 NapCatQQ
由于权限问题,补丁过程需要手动替换 package.json,请注意备份原文件~
koishi需求
对于koishi,官方直接提供了直装版windows应用,官方文档:为 Windows 安装 | Koishi
总结
该工作流对设备操作系统没有过多限制,三大主流操作系统均可运行:
- windows
- macos
- linux
但是笔者推荐使用linux进行服务搭建。后续安装我只讲解linux部分,由于macos和windows均有gui,请自行安装。
搭建NapCat容器
首先保证你能正常连接dockerhub,否则无法进行后续操作!NapCat-Docker官网也有同样的安装指导:
GitHub - NapNeko/NapCat-Docker: NapCat-Docker
首先创建一个 docker-compose.yml
1 | |
然后运行
1 | |
如果成功了,查看日志获取登录链接:
1 | |

登录成功后,打开webui,可以看到这样的界面:

打开左侧的网络配置,添加一个websocket服务:

设置地址为广播(0.0.0.0),端口为:3001,上报自身消息为自选项。保存这里生成的token,备用。

搭建koishi容器
koishi也使用docker搭建,但是注意要和NapCat在不同的目录:
1 | |
1 | |
使用 http://<主机ip>:5140 打开koishi控制面板。
进入依赖管理,点击小火箭更新所有依赖包:

然后到插件市场,安装adapter-onebot:

点击安装后页面会重载,重新回到插件市场,点击adapter-onebot右上角的修改,点击配置:

这里需要用到NapCat配置的时候生成的token,将它填入这里的token,协议选择ws,下面填入NapCat的地址和3001端口:

然后点击右上角的启动插件,等到左侧显示变绿说明成功了。
测试连接
直接对机器人发送help,如果有回复说明成功。
配置参考:
ref(APA): 天穹何以高.天远日记.https://www.tqhyg.net. Retrieved 2025/10/1.
原文链接:
下载blockly插件
前往koishi插件市场搜索blockly,然后安装blockly-null,注意补药安装blockly,原版插件已经不再维护且无法在最新版koishi上使用。

安装好后,启动插件。
然后你的侧边会多出来一个选项:

点击打开它,接下来我们介绍一些简单的的插件知识。
如何编写blockly插件
首先你可以尝试导入该插件:
1 | |
只需要复制他们,然后选择导入插件:

并选择作为新插件导入:

将这里的QQ号切换为你自己的:

点击编译、启动插件:

然后发送一段链接(比如:https://baidu.com)给机器人,如果它返回了一张图片给你说明该插件生效了。
你可以先阅读一下这个代码,然后我解释几个地方。
数据类型
文本
对于拼接文本块,你可以点击齿轮修改文本参数量,并且该拼接不换行:

对于寻找第一次出现的地方块,返回位置+1

如果需要返回换行,尝试使用模板字符串,双击AB字样打开编辑器,设置内容为\n,随意添加一个tag即可:

数字
只有数字可进行数学运算,提供了转化为数字的块,但是失败会返回NoneType。
列表
列表可供遍历查询,适合设置为权限组或需要广播的群组列表。
对象
对象特指json对象:

提供了三个块,都非常的有用,可以使用{}块直接创建一个json对象(该块返回json对象,而非字符串)。其中键为常量,值可选。

指令创建
使用事件分类中的闯将新的指令,就可以添加一条指令,指令名称为唤起指令的开头文本。

打开创建指令块的小齿轮,这里可以设置参数的类型,对参数进行类型检测。(该操作并不好用,我喜欢用后端对数据进行处理)

上下文获取
上下文主要是获取当前指令的信息,比如发送人qq号,群号,内容,参数等等。

渲染html
该功能可以配合后端使用,后端返回html由koishi渲染成图片再回复:
网络请求
一个完整的网路请求如下:

使用自己的后端处理数据
依照上面的完整网络请求,你可以编写出一些后端api来对接机器人前端,这使得机器人的可拓展性得到了很大的提升。(其实使用为我很不喜欢blockly编程)
示例代码可以参考:
GitHub - zhywyt/BeetleRunBackEnd: back end of beetle run checkin statistics
该代码使用python编写,外加systemd服务,响应速度块,性能好,更重要的是自由度高。