【QQBot】基于 go-cqhttp + nonebot2 搭建的QQ机器人

0x01:下载 go-cqhttp release文件


下载对应版本压缩包.zip.tar.gz

0x02:解压 并 运行

这里只单独介绍Linux下安装

当前使用版本: v1.0.0-beta4
以压缩包 go-cqhttp_linux_amd64.tar.gz为例

# 新建目录 把压缩包放进去
[root@centos7 ~] # mkdir qqbot && mv go-cqhttp_linux_amd64.tar.gz ./qqbot
# 进入目录
[root@centos7 ~] # cd qqbot
# 解压
[root@centos7 ~] # tar -zxvf go-cqhttp_linux_amd64.tar.gz
# 当前目录结构
├── LICENSE
├── README.md
├── go-cqhttp
└── go-cqhttp_linux_amd64.tar.gz

# 第一次运行
[root@centos7 ~] # ./go-cqhttp faststart
未找到配置文件,正在为您生成配置文件中!
请选择你需要的通信方式:
> 1: HTTP通信
> 2: 正向 Websocket 通信
> 3: 反向 Websocket 通信
> 4: pprof 性能分析服务器
请输入你需要的编号,可输入多个,同一编号也可输入多个(如: 233)
您的选择是:13
默认配置文件已生成,请修改 config.yml 后重新启动!

到这里已经生成了config.yml配置文件, 我选择了HTTP通信反向WebSocket一般情况搭配nonebot2使用只需要开启反向WebSocket

0x03:修改配置文件

此处修改同样适用 config.hjson配置文件

  • uid: 改成QQ号
  • password: 改成密码
  • ws://your_websocket_universal.server: 改成 ws://127.0.0.1:8765/cqhttp/ws
  • ws://your_websocket_api.server 改成 ws://127.0.0.1:8765/cqhttp/api
  • ws://your_websocket_event.server 改成 ws://127.0.0.1:8765/cqhttp/event

到此修改完毕

0x04:启动 go-cqhttp

[root@centos7 ~] # ./go-cqhttp faststart
[2021-05-27 23:51:53] [INFO]: 当前版本:v1.0.0-beta4
[2021-05-27 23:51:53] [INFO]: 用户交流群: 721829413
[2021-05-27 23:51:53] [WARNING]: 虚拟设备信息不存在, 将自动生成随机设备.
[2021-05-27 23:51:53] [INFO]: 已生成设备信息并保存到 device.json 文件.
[2021-05-27 23:51:53] [INFO]: 开始尝试登录并同步消息...
[2021-05-27 23:51:53] [INFO]: 使用协议: iPad
[2021-05-27 23:51:54] [INFO]: Protocol -> connect to server: 113.96.13.95:8080
[2021-05-27 23:51:58] [INFO]: 收到服务器地址更新通知, 将在下一次重连时应用.
[2021-05-27 23:51:58] [INFO]: 登录成功 欢迎使用: 雨
[2021-05-27 23:51:58] [INFO]: 开始加载好友列表...
[2021-05-27 23:51:58] [INFO]: 共加载 20 个好友.
[2021-05-27 23:51:58] [INFO]: 开始加载群列表...
[2021-05-27 23:52:00] [INFO]: 共加载 11 个群.
[2021-05-27 23:52:00] [INFO]: 信息数据库初始化完成.
[2021-05-27 23:52:00] [INFO]: 正在加载事件过滤器.
[2021-05-27 23:52:00] [INFO]: 资源初始化完成, 开始处理信息.
[2021-05-27 23:52:00] [INFO]: アトリは、高性能ですから!
[2021-05-27 23:52:00] [INFO]: CQ HTTP 服务器已启动: 127.0.0.1:5700
[2021-05-27 23:52:00] [INFO]: 正在检查更新.
[2021-05-27 23:52:00] [INFO]: 开始尝试连接到反向WebSocket Universal服务器: ws://127.0.0.1:8765/cqhttp/ws
[2021-05-27 23:52:00] [WARNING]: 连接到反向WebSocket Universal服务器 ws://127.0.0.1:8765/cqhttp/ws 时出现错误: dial tcp 127.0.0.1:8765: connect: connection refused

这里go-cqhttp启动完成。

0x05:安装 nonebot2

  1. pip install -i https://pypi.doubanio.com/simple nb-cli 推荐

  2. pip install -i https://pypi.doubanio.com/simple nonebot2

推荐安装 nb-cli 方便后期生成 Bot 项目

0x06:生成 bot 项目

[root@centos7 ~] # nb
# Create a New Project
# Project Name: lin
# In a "src" folder
# Load NoneBot Builtin Plugin? (y/N) n
  • adapter 选择 cqhttp 或者 gocq

机器人项目生成好了, 下面是目录结构

lin
├── Dockerfile
├── README.md
├── bot.py
├── docker-compose.yml
├── pyproject.toml
└── src
    └── plugins

# bot.py 的内容
[root@centos7 ~] # cat bot.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import nonebot

# Custom your logger
#
# from nonebot.log import logger, default_format
# logger.add("error.log",
#            rotation="00:00",
#            diagnose=False,
#            level="ERROR",
#            format=default_format)

# You can pass some keyword args config to init function
nonebot.init()
app = nonebot.get_asgi()

driver = nonebot.get_driver()

nonebot.load_from_toml("pyproject.toml")

# Modify some config / config depends on loaded configs
#
# config = driver.config
# do something...


if __name__ == "__main__":
    nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
    nonebot.run(app="__mp_main__:app")

修改bot,py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import nonebot
from nonebot.adapters.cqhttp.bot import Bot
# from nonebot.adapters.cqhttp.bot import Bot
# Custom your logger
# 
# from nonebot.log import logger, default_format
# logger.add("error.log",
#            rotation="00:00",
#            diagnose=False,
#            level="ERROR",
#            format=default_format)

# You can pass some keyword args config to init function
nonebot.init()
nonebot.get_driver().register_adapter("cqhttp", Bot)
app = nonebot.get_asgi()

driver = nonebot.get_driver()

nonebot.load_from_toml("pyproject.toml")

# Modify some config / config depends on loaded configs
# 
# config = driver.config
# do something...


if __name__ == "__main__":
    nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
    nonebot.run(app="__mp_main__:app")

0x07:运行

运行前需要先安装好 cqhttp adapter
nb adapter install cqhttp

也请确保 go-cqhttp 也正处于运行状态 可以另起一个终端

  • 修改 .env.dev 中的 PORT参数(刚刚在go-cqhttp配置文件中给出的反向代理地址的端口为 8765) 这里PORT=8765就可以, 或者你可以根据自己的喜好更改, 不要忘记连同 go-cqhttp目录下config.yml 或 config.hjson文件中的反向代理端口一起修改。

到此就可以正式运行了

# python3 或者 python
[root@centos7 ~] # python3 bot.py
05-28 00:33:43 [INFO] nonebot | NoneBot is initializing...
05-28 00:33:43 [INFO] nonebot | Current Env: dev
05-28 00:33:43 [DEBUG] nonebot | Loaded Config: {'driver': 'nonebot.drivers.fastapi', 'host': IPv4Address('127.0.0.1'), 'port': 8765, 'debug': True, 'api_root': {}, 'api_timeout': 30.0, 'access_token': None, 'secret': None, 'superusers': set(), 'nickname': set(), 'command_start': {'/'}, 'command_sep': {'.'}, 'session_expire_timeout': datetime.timedelta(seconds=120), 'environment': 'dev'}
05-28 00:33:43 [DEBUG] nonebot | Succeeded to load adapter "cqhttp"
05-28 00:33:43 [WARNING] __main__ | Always use `nb run` to start the bot instead of manually running!
05-28 00:33:43 [INFO] nonebot | Running NoneBot...
05-28 00:33:43 [DEBUG] nonebot | Loaded adapters: cqhttp
05-28 00:33:43 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:8765 (Press CTRL+C to quit)
05-28 00:33:43 [INFO] uvicorn | Started reloader process [1165] using watchgod
05-28 00:33:43 [INFO] nonebot | NoneBot is initializing...
05-28 00:33:43 [INFO] nonebot | Current Env: dev
05-28 00:33:43 [DEBUG] nonebot | Loaded Config: {'driver': 'nonebot.drivers.fastapi', 'host': IPv4Address('127.0.0.1'), 'port': 8765, 'debug': True, 'api_root': {}, 'api_timeout': 30.0, 'access_token': None, 'secret': None, 'superusers': set(), 'nickname': set(), 'command_start': {'/'}, 'command_sep': {'.'}, 'session_expire_timeout': datetime.timedelta(seconds=120), 'environment': 'dev'}
05-28 00:33:43 [DEBUG] nonebot | Succeeded to load adapter "cqhttp"
05-28 00:33:44 [INFO] uvicorn | Started server process [1168]
05-28 00:33:44 [INFO] uvicorn | Waiting for application startup.
05-28 00:33:44 [INFO] uvicorn | Application startup complete.
05-28 00:33:44 [INFO] uvicorn | ('127.0.0.1', 14601) - "WebSocket /cqhttp/ws" [accepted]
05-28 00:33:44 [INFO] nonebot | WebSocket Connection from CQHTTP Bot ****** Accepted!

到此看到WebSocket Connection from CQHTTP Bot xxxx Accepted!就代表机器人已经启动完毕了, 后面会显示从go-cqhttp上报的消息。

0x08:总结

更详细的教程还请参考两个官网, 俺只是把自己第一次成功使用的过程做了个梳理, 希望对你有所帮助。

点赞
  1. zeruns说道:
    Google Chrome Windows 10
    腾讯不是要封杀QQ机器人吗
    1. Taki说道:
      Google Chrome Windows 10
      还有一些开源框架幸存, mirai onebot 和其他基于这两个框架的分支, go-cqhttp就是。gayhub能搜到(bushi)

Taki进行回复 取消回复

电子邮件地址不会被公开。必填项已用 * 标注