使用go-cqthhp+koishi框架搭建QQ机器人

9/10/2021 botQQ机器人

# 官方文档

官方文档直连 (opens new window)

# 准备工作

# 需要node.js v12+

1、windows安装:
前往node.js官网 (opens new window)下载Windows 二进制文件 (.zip)并解压
最好解压到自己知道的路径

win系统这里需要配置环境变量
我的电脑-属性-高级系统设置-环境变量-系统变量-在PATH后加入npm的路径
比如我的F:\Node;

2、linux安装nodejs v12+:
1、安装github

yum install git -y # (Centos)
apt install git # (Ubuntu)
1
2

3、安装node.js管理器等组件

git clone git://github.com/creationix/nvm.git ~/nvm
# 设置nvm 自动运行
echo "source ~/nvm/nvm.sh" >> ~/.bashrc
source ~/.bashrc
# 查看所有版本(部分环境可能不支持最高版本)
nvm list-remote
# 安装npm的最新版本
nvm install stable
# 使用最新版本
nvm use stable
1
2
3
4
5
6
7
8
9
10

4、选择国内镜像

  • 对于国内而言,访问外网是很困难的,这会导致访问速度很慢,而国内镜像就很重要了
    node 国内镜像
export NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node
1

npm 国内镜像

npm config set registry https://registry.npm.taobao.org
1

npm WIN国内镜像

npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
1
2

5、安装yarn

npm i yarn -g
1

# 下载go-cqhttp

前往githubgo-cqhttp (opens new window)
在'release'处下载最新版本

tar -zxvf go-cqhttp_linux_arm64.tar.gz
1

# 运行go-cqhttp

进入与go-cqhttp(.exe)相同目录的文件夹
使用终端打开go-cqhttp
windows使用

.\go-cqhttp.exe
1

Linux使用

./go-cqhttp
1

windows使用shift+右键可以快捷打开powershell终端
Linux可能需要给go-cqhttp运行权限

chmod +x go-cqhttp
1

启动后需要选择通信方式
推荐选择 正向 Websocket 通信
提示有默认配置文件已生成即可将终端关掉,去修改配置文件

# 修改config.yml

只需看

# go-cqhttp 默认配置文件
account: # 账号相关
  uin: 123456 # QQ账号
  password: '' # 密码为空时使用扫码登录
  encrypt: false  # 是否开启密码加密
  status: 0      # 在线状态 请参考 https://docs.go-cqhttp.org/guide/
1
2
3
4
5
6

修改uin为自己的小号,password可填可不填
然后再次启动go-cqhttp
之后会看到扫码登录或者扫码验证,用手机扫码一下就能登录进去了
做完这步以后,外卖把它挂在后台,其他都不用管了

# vscode安装及使用

** windows系统 **
推荐使用VScode (opens new window)
官网下载特别慢使用
国内镜像下载VScode-国内镜像 (opens new window)
运行vscode
刚开始你的界面是全英文的,需要安装扩展
我们在左侧找到扩展(快捷键ctrl+shift+x)
搜索Chinese(simplified) Language Pack for Visual Studio Code
点击install安装
安装完成以后,关闭vscode再使用管理员身份运行vscode
在我们熟悉的位置新建一个文件夹命名随便,最好用英文
然后把新建好的文件夹直接拖进vscode
打开终端(快捷键ctrl+shift+`)
给yarn授权

set-ExecutionPolicy RemoteSigned
1

检查授权

get-ExecutionPolicy
1

如果输出RemoteSigned则修改成功

# 安装koishi

使用yarn安装

# 安装 koishi
yarn add koishi -D

# 生成配置文件
yarn koishi init

# 补全依赖
yarn
1
2
3
4
5
6
7
8

==注意==
生成配置文件的时候要选择与go-cqhttp一致的OneBot-WebSocket协议
port不需要改bot-qq Number与go-cqhttp的qq号要一致
configurate another bot?时选择 n
Database Type暂时选None
经本人测试,插件assets、eval、webui插件会报错,不能选
github插件可选
package.json was updated. install new dependencies now?
的时候输入y (无脑回车也行)

至此koishi框架安装完成!

# 修改koishi配置文件

// koishi.config.js
module.exports = {
  // Koishi 服务器监听的端口
  port: 8080,
  onebot: {
    secret: '',
  },
  bots: [{
    type: 'onebot:ws',
    // 对应 cqhttp 配置项 ws_config.port
    server: 'ws://localhost:6700',
    selfId: '123456', // 你的QQ账号
    token: 'ws://localhost:6700',
  }],
  plugins: {        // 插件
  //  assets: {},   // 用不了的插件,删掉或者在前面打上俩斜杆
    chat: {},
    common: {},
  //  eval: {},
  },
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

插件只需注意assets、eval、webui插件用不了
如果配置文件有,将其删掉就行

# 启动koishi

在终端输入

yarn koishi start
1

即可启动koishi机器人
现在可以对你的机器人说话了
向机器人发送

echo 你好
1

机器人会回复你好

# 编写自己的插件并调用

需要一点JavaScript基础
在与koishi.config.js同级目录下新建my-plugin.js文件
然后在koishi.config.js中的plugins内加入插件

plugins: {
    'chat': {},
    'common': {},
    './my-plugin': {}, // 这个是我们加入自己的插件
  }
1
2
3
4
5

my-plugin.js文件内输入以下内容

// 如果机器人收到“天王盖地虎”,就回应“宝塔镇河妖”
module.exports = (ctx) => {
  ctx.middleware((session, next) => {
    if (session.content === '天王盖地虎') {
      session.send('宝塔镇河妖')
    }
    return next()
  })
}
1
2
3
4
5
6
7
8
9

在终端重启koishi
选择终端,按下ctrl+c会关闭koishi,再输入

yarn koishi start
1

回车
重新启动koishi(或者直接按键盘方向键的 上 键)
现在,向机器人发送天王盖地虎
机器人会回复宝塔镇河妖
如果你向开发插件,可以看看官方文档 (opens new window)

# 注意

使用koishi框架需要注意的地方

  • 1、先启动go-cqhttp再启动koishi框架
    不然会导致koishi框架连不上onebot
  • 2、go-cqhttp的通信协议必须与koishi的通信协议保持一致
    比如gocqhttp为ws协议,koishi就必须用ws协议
  • 3、koishi在运行时,go-cqhttp必须在后台运行

# 插件函数调用报错问题

官方文档作者有些地方没写明白
比如在调用消息段segment()函数的时候
官方文档里面没有写明需要传入函数
所以需要在插件开头传入函数

const { segment } = require("koishi-utils");
module.exports = (ctx) => {
    ...........
}
1
2
3
4

其他函数报错我暂时还没找到解决办法
比如Time未声明
如果有大佬找到解决方法可以在评论区留言,谢谢awa

# 写在最后

文章里可能有很多说错的地方awa,大家可以一一指出
目前我自己也没摸清楚官方文档内的某些函数要怎么用
对于我们初学者而言,很多东西还需要大家一起摸索,讨论,向大佬请教

最近更新: 11/18/2024, 9:46:50 AM