二号机-KiviBot：轻量高效，跨平台的QQbot

二号机 - 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 版本，需要配置好环境变量 (包括

Copy
NODE_HOME

变量), 以确保命令行能够正常访问

Copy
node

和

Copy
npm

命令。

Copy
假如在配置完环境变量之后仍然无法使用启动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）来说更灵活、功能更强大，是程序员和系统管理员的首选方式。

Copy
npmi -g kivibot@latest

当然，也可以选择不安装到全局，然后使用 npm kivi 来执行 CLI 命令

iii. 通过 CLI 引导生成配置文件

Copy
# 创建空目录作为框架目录, 并切换到这个目录mkdir ~/bot && cd ~/bot
# 通过 CLI 引导在当前目录下生成配置文件
kivi init

iv. 启动 KiviBot

Copy
kivistart

v. 后台部署（可选）

Copy
kivi deploy
# CLI 将会使用 pm2 将框架进程部署到后台

2. 在 Windows 平台使用

部署方式同上

3. 在 Android 平台使用 KiviBot

i. 下载安装 Termux

这一步应该不用教吧？

ii. 配置 Termux 国内镜像源

Copy
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

Copy
pkg install nodejs

剩下的步骤同 Linux 安装完全相同

事实上，所有的安装方式都是通过模拟 / 刷入 Linux 环境来运行 node 从而运行框架，因此从理论上来说你现在带的电子手表也可以运行 KiviBot，没准性能还真的足够。

配置

按照步骤安装好之后，你应该会收到 Bot 的上线提醒。 现在，可以向机器人发送

Copy
/help

指令来查看框架所支持的指令列表。

消息指令

Copy
KiviBot

没有 UI 界面，插件管理、管理变更、状态监控等操作都是通过

QQ 消息指令

来实现的。向机器人发送

Copy
/help

可查看所有框架命令，

仅限管理员使用

, 私聊群聊均有效。 框架所有的消息指令列表：

KiviBot CLI 命令

KiviBot CLI 是框架的脚手架，或叫命令行工具，就是你启动框架的

Copy
kivi

命令。 你可以使用它来辅助生成配置文件、安装插件和依赖、启动框架等。 输入

Copy
kivi

命令即可查看 CLI 的详细用法，下表列出了 CLI 的所有命令及其说明。

配置文件

框架目录下的

Copy
kivi.json

是

Copy
KiviBot

的配置文件，包含了一系列框架配置，可以手动进行修改，重启后生效。

kivi start

Copy
kivi.json

Copy
app.js

Copy
{
// 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"

}
}

常见问题

会有很多常见问题，但是我懒得看了，凑合着用吧

插件

Copy
KiviBot

的插件分为以下两种：

npm 插件

本地插件 不管是 npm 插件还是本地插件，他们都应该是符合 CommonJS 规范的 node 模块。插件配置文件统一放在了 框架目录/data/plugins/<name> 对应目录下（一般是 config.json 文件）, 没做特殊说明外，大部分官方插件的配置请在此处修改，直接修改源码会在更新时被覆盖导致配置无效。

node 模块，即：模块目录下存在

Copy
index.js

Copy
package.json

Copy
package.json

Copy
main

npm 插件

所谓 npm 插件，就是可以使用

Copy
/plugin add

消息指令直接从 npm 下载安装的插件（也可通过

Copy
npm

或者

Copy
kivi

命令在终端进行安装）。通常这类插件的命名遵循

Copy
kivibot-plugin-

开头的约定。官方插件会采取这种形式发布到 npm 提高用户体验。npm 插件需要先安装才能使用，安装完成后，会被存放于框架目录下的

Copy
node_modules

目录下，你可以在里面找到插件的源代码。

在使用消息指令安装或者启用插件时，不需要带上 kivibot-plugin- 前缀。

本地插件

顾名思义，本地插件是指没有被发布到 npm 的本地插件（如用户自行开发的插件，或者一些私人插件）, 不需要下载。存放在框架目录下的

Copy
plugins

目录下。和 npm 插件一样，每一个插件都应该是一个符合

Copy
CommonJS

规范的 node 模块。

使用体验

此机器人配置简单，插件多且开发友好，只可惜作者跑路了。 虽然它的对话功能比一号机多了些 bug，不支持性格调教设定，但是多了很多花里胡哨的功能（对我来说实用性一般）

还是等 ChatGPT 的 api 开放吧，现在的 3.0 太死板了。