二号机 - KiviBot:轻量高效,跨平台的 QQbot#
date: January 27, 2023
slug: 18
status: Published
tags: 技术
type: Post
Bot 介绍#
KiviBot 是使用TypeScript语言编写的轻量、优雅、跨平台、开发者友好、能跑就行的 QQ 机器人框架。
框架提供了完备的状态监控、插件管理(支持热更新)、主副管理员机制、消息通知、请求处理功能以及友好的脚手架,开箱即用。框架完全开源,可扩展性强,插件开发简单,核心底层协议使用 oicq v2, API 众多,功能强大。另外,框架使用 node 驱动,得益于 node 及其高效的 v8 引擎,KiviBot 的性能可观。
安装#
1. 在 Linux 平台使用#
i. 安装 node.js#
使用对应的包管理器或者去官网安装即可(我选的是宝塔)。建议使用 18 版本,最低不得低于 14 版本,需要配置好环境变量 (包括
NODE_HOME
变量), 以确保命令行能够正常访问
node
和
npm
命令。
假如在配置完环境变量之后仍然无法使用启动bot,运行以下代码有奇效:
echo -e "export PATH=(npmprefix−g)/bin:(npm prefix -g)/bin:(npmprefix−g)/bin:PATH" >> ~/.bashrc && source ~/.bashrc
(应该还是我菜)
ii. 全局安装 KiviBot CLI#
CLI (Command Line Interface) 是命令行界面的缩写,指通过在终端或命令行中输入文本命令来操作计算机系统的方式。在 CLI 中,用户通过键盘输入命令,计算机根据命令执行相应操作。CLI 相对于图形界面(GUI)来说更灵活、功能更强大,是程序员和系统管理员的首选方式。
npmi -g kivibot@latest
当然,也可以选择不安装到全局,然后使用 npm kivi 来执行 CLI 命令
iii. 通过 CLI 引导生成配置文件#
# 创建空目录作为框架目录, 并切换到这个目录mkdir ~/bot && cd ~/bot
# 通过 CLI 引导在当前目录下生成配置文件
kivi init
iv. 启动 KiviBot#
kivistart
v. 后台部署(可选)#
kivi deploy
# CLI 将会使用 pm2 将框架进程部署到后台
2. 在 Windows 平台使用#
部署方式同上
3. 在 Android 平台使用 KiviBot#
i. 下载安装 Termux#
这一步应该不用教吧?
ii. 配置 Termux 国内镜像源#
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.aliyun.com/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.aliyun.com/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.aliyun.com/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list
pkgupdate
iii. 安装 Node.js#
pkg install nodejs
剩下的步骤同 Linux 安装完全相同#
事实上,所有的安装方式都是通过模拟 / 刷入 Linux 环境来运行 node 从而运行框架,因此从理论上来说你现在带的电子手表也可以运行 KiviBot,没准性能还真的足够。
配置#
按照步骤安装好之后,你应该会收到 Bot 的上线提醒。 现在,可以向机器人发送
/help
指令来查看框架所支持的指令列表。
消息指令#
KiviBot
没有 UI 界面,插件管理、管理变更、状态监控等操作都是通过
QQ 消息指令
来实现的。向机器人发送
/help
可查看所有框架命令,
仅限管理员使用
, 私聊群聊均有效。 框架所有的消息指令列表:
KiviBot CLI 命令#
KiviBot CLI 是框架的脚手架,或叫命令行工具,就是你启动框架的
kivi
命令。 你可以使用它来辅助生成配置文件、安装插件和依赖、启动框架等。 输入
kivi
命令即可查看 CLI 的详细用法,下表列出了 CLI 的所有命令及其说明。
配置文件#
框架目录下的
kivi.json
是
KiviBot
的配置文件,包含了一系列框架配置,可以手动进行修改,重启后生效。
kivi start
kivi.json
app.js
{
// Bot QQ 账号, 由 CLI 引导生成"account": 114514,
// 登录方式, 由 CLI 引导生成, 可选 password(密码登录) 和 qrcode(扫码登录)"login_mode": "password",
// 设备锁验证方式, 选择密码登录时, 由 CLI 引导生成, 如果选扫码默认是验证码登录// 可选 sms(短信验证码验证) 和 qrcode(扫码验证)"device_mode": "sms",
// 框架日志消息显示模式, 默认为 short(精简模式, 忽略 CQ 码, 消耗资源少)// 也可设置为 detail(详细模式, 会显示 CQ 码具体内容, 对于调试插件有帮助)"message_mode": "short",
// Bot 账号密码, 在选择密码登录时, 由 CLI 引导生成, 如果选择扫码默认为空"password": "",
// 框架日志输出等级, 默认 info, 不输出日志可置为 off, 调试插件可以设为 debug"log_level": "info",
// 管理员列表, 由 CLI 引导生成, 第一个为主管理员(必须), 其余的为副管理员(可选)"admins": [1141284758],
// 启用插件列表, 包括 npm 插件(kivibot-plugin- 开头)和 plugins 目录下的插件// npm 插件(kivibot-plugin- 开头)忽略 kivibot-plugin- 前缀"plugins": ["demo"],
// 机器人事件通知"notice": {
// 是否启用, 可通过消息指令 /config notice on 和 /config notice off 进行实时切换"enable":true,
// 好友列表相关配置"friend": {
// 好友申请"request": {
// 是否开启好友申请通知, 默认开启(true), 不开启请设置为 false"enable":true,
// 处理好友申请, 可选:ignore(忽略, 默认), accept(同意), refuse(拒绝)"action": "ignore"
},
// 新增好友通知, 默认开启(true), 不开启请设置为 false"increase":true,
// 好友减少通知, 默认开启(true), 不开启请设置为 false"decrease":true,
// 好友私聊消息通知, 默认关闭(false), 开启请设置为 true"message":false},
// 群聊相关配置"group": {
// 邀请机器人进群"request": {
// 是否开启通知, 默认开启(true), 不开启请设置为 false"enable":true,
// 处理群邀请, 可选:ignore(忽略, 默认), accept(同意), refuse(拒绝)"action": "ignore"
},
// 新增群聊通知, 默认开启(true), 不开启请设置为 false"increase":true,
// 新增群聊通知, 默认开启(true), 不开启请设置为 false"decrease":true,
// 机器人被禁言通知, 默认开启(true), 不开启请设置为 false"ban":true,
// 群管理员变动通知, 默认开启(true), 不开启请设置为 false"admin":true,
// 群转让通知, 默认开启(true), 不开启请设置为 false"transfer":true}
},
// oicq 协议配置, 参考 oicq 文档, data 目录限制为 data/oicq, 无法手动修改"oicq_config": {
// 登录协议:1 为安卓手机, 2 为安卓平板, 3 为安卓手表, 4 为 MacOS, 5 为 iPad"platform": 5,
// oicq 的日志等级, oicq 日志会输出到框架目录的 logs 文件夹下"log_level": "info",
// 群聊中, 是否忽略机器人自身的消息, 默认忽略, 不忽略请改为 false"ignore_self":true,
// 是否自动选择最优服务器, 默认开启, 关闭请改为 false// 关闭后会一直使用 msfwifi.3g.qq.com:8080 进行连接"auto_server":true,
// 是否缓存群员列表, 默认缓存提高效率, 关闭后将大幅减小占用的内存"cache_group_member":true,
// 网络问题导致掉线时的重连间隔, 默认 5(秒), 设置为 0 不自动重连"reconn_interval": 5,
// 被风控时是否尝试用分片发送, 默认 true, 不发送分片请设置为 false"resend":true,
// 指定 ffmpeg 路径"ffmpeg_path": "ffmpeg",
// 指定 ffprobe 路径"ffprobe_path": "ffprobe"
}
}
常见问题#
会有很多常见问题,但是我懒得看了,凑合着用吧
插件#
KiviBot
的插件分为以下两种:
-
npm 插件
-
本地插件
不管是 npm 插件还是本地插件,他们都应该是符合CommonJS
规范的 node 模块。插件配置文件统一放在了框架目录/data/plugins/<name>
对应目录下(一般是config.json
文件), 没做特殊说明外,大部分官方插件的配置请在此处修改,直接修改源码会在更新时被覆盖导致配置无效。node 模块,即:模块目录下存在
index.js
package.json
package.json
main
npm 插件#
所谓 npm 插件,就是可以使用
/plugin add
消息指令直接从 npm 下载安装的插件(也可通过
npm
或者
kivi
命令在终端进行安装)。通常这类插件的命名遵循
kivibot-plugin-
开头的约定。官方插件会采取这种形式发布到 npm 提高用户体验。npm 插件需要先安装才能使用,安装完成后,会被存放于框架目录下的
node_modules
目录下,你可以在里面找到插件的源代码。
在使用消息指令安装或者启用插件时,不需要带上 kivibot-plugin-
前缀。
本地插件#
顾名思义,本地插件是指没有被发布到 npm 的本地插件(如用户自行开发的插件,或者一些私人插件), 不需要下载。存放在框架目录下的
plugins
目录下。和 npm 插件一样,每一个插件都应该是一个符合
CommonJS
规范的 node 模块。
使用体验#
此机器人配置简单,插件多且开发友好,只可惜作者跑路了。 虽然它的对话功能比一号机多了些 bug,不支持性格调教设定,但是多了很多花里胡哨的功能(对我来说实用性一般)
还是等 ChatGPT 的 api 开放吧,现在的 3.0 太死板了。