目前可用的QQ机器人hook框架-Chronocat教程(复活?)

本文最后更新于:2024年6月10日 中午

由于看到隔壁的最新消息,由于腾讯对低版本加了检测,故旧版本cc无法使用,本教程删除

另外cc还在维护,最新版具体如何获得,看大家的渠道了

还有一件事,就是和大家说其实QQ9.0.8也是有签名的,只不过被删了,

就这样吧

2024.06.10 更新

cc已经复活了,配置方法好像大概没变?

chronocat文档:点我 支持nonebot,koishi等框架


接下来是原来的教程

最近go-cqhttp发表了一个重要通知,就是因为txsb频繁的去修改加密签名,go-cqhttp开发组已无力去维护本项目,协议库的时代已成为过去,陪伴了我们三年的时间

我们可以在gocqGitHub仓库看到这样的一句话

因为本人在学校里住宿,平时只能节假日或者周末上线,所以得知消息来晚了一点(以下是官方原话自行看吧)

所以本期教程就使用推荐的框架Chronocat

配置客户端

首先是安装QQNT版官方客户端 这里Chronocat推荐了了三个版本 选择对应的系统下载👇 👇

Windows

macOS

Linux

本期教程以Windows系统演示

这里博主已经安装好了

登录之后 左下角的三条横线->设置->登录设置

把第一个和第二个打开 然后关掉设置

客户端已经配置好了 接下来去下载框架本体

安装Liteloader

因为Chronocat需要liteloader来启动

注:本教程的liteloaderqqnt 版本太旧了,推荐大家看官方文档安装liteloader

liteloader文档链接:https://liteloaderqqnt.github.io/

把补丁解压 放到你的qqnt安装目录下的 resources->app文件夹

打开下面的package.json文件 修改如下

1
2
3
4
5
6
7
8
  {
...
"homepage": "https://im.qq.com",
"sideEffects": true,
- "main": "./app_launcher/index.js",
+ "main": "./LiteLoader",
...
}

保存关闭 退出你的qq 重新登录

打开设置

出现这两个说明安装成功了

安装Chronocat

下载最新版的插件

chronocat-llqqnt-v0.0.52.zip

备用下载链接

解压 打开你电脑上的文档文件夹 找到LiteLoaderQQNT文件夹

打开该文件夹 进入plugins文件夹 把解压好的chronocat-llqqnt-v0.0.52复制进去

重启一下QQ 确保插件正确加载

已经安装好了

对接Nonebot

确保你已经安装nb-cli如果没有可以去我之前的教程查看

打开你的cmd or powershell 输入如下

1
2
3
4
pip install nonebot-adapter-red
pip install nonebot2[httpx]
pip install nonebot2[websockets]
pip install nonebot2[aiohttp]

安装依赖后

打开我们编写机器人的文件夹

这里我们修改.env.devpyproject.toml

打开pyproject.toml

1
2
3
adapters = [
{ name = "OneBot V11", module_name = "nonebot.adapters.onebot.v11" }
]

改成

1
2
3
adapters = [
{ name = "RedProtocol", module_name = "nonebot.adapters.red" }
]

保存退出 如上图所示

再打开.env.dev

添加内容

1
2
DRIVER=~httpx+~websockets
DRIVER=~aiohttp

保存退出

返回当前文件夹 启动nonebot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
10-14 18:12:30 [SUCCESS] nonebot | NoneBot is initializing...
10-14 18:12:30 [INFO] nonebot | Current Env: dev
10-14 18:12:31 [SUCCESS] nonebot | Succeeded to load plugin "echo" from "nonebot.plugins.echo"
10-14 18:12:31 [SUCCESS] nonebot | Running NoneBot...
10-14 18:12:31 [ERROR] nonebot | Error when running startup function. Ignored!
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\__init__.py", line 331, in run
get_driver().run(*args, **kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\drivers\none.py", line 70, in run
loop.run_until_complete(self._serve())
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 636, in run_until_complete
self.run_forever()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 321, in run_forever
super().run_forever()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 603, in run_forever
self._run_once()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 1899, in _run_once
handle._run()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\drivers\none.py", line 74, in _serve
await self._startup()
> File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\drivers\none.py", line 82, in _startup
await self._lifespan.startup()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\drivers\_lifespan.py", line 36, in startup
await self._run_lifespan_func(self._startup_funcs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\drivers\_lifespan.py", line 30, in _run_lifespan_func
await cast(ASYNC_LIFESPAN_FUNC, func)()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\adapters\red\adapter.py", line 67, in startup
raise RuntimeError(
RuntimeError: No bots found in config!
Please check your config file and make sure it's correct.
10-14 18:12:31 [INFO] nonebot | Application startup completed.

如不出意外 你会收到如下报错

关闭命令行窗口 打开你的电脑c盘->user文件夹->电脑用户名文件夹

找到一个名叫.chronocat的文件夹

打开 config->chronocat.yml

这里我只做单账号配置 多账号配置参考官方在GitHub写的文档->传送门

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
################################################################
# 全局配置
################################################################
#
# 下面的配置是通用的!如果你只登录一个账号,
# 那么只需修改下面这部分配置即可!
#
################################################################

# servers:服务配置
#
# 配置 Chronocat 开启的服务。需要尤其注意服务列表的格式哦~
servers:
# type:服务类型
#
# 开启 red 服务只需要指定 type 为 red 即可。
- type: red

# token:服务密码
#
# Chronocat 已经自动生成了随机密码。要妥善保存哦!
# 客户端使用服务时需要提供这个密码!
token: '8b3b9d03d3f053ae02712a3106e28e178c14c3d1d7a1be73dcf7b763e83b1485'

# port:服务端口
#
# Chronocat 开启 red 服务的端口,默认为 16530。
port: 16530

# 开启 satori 服务与上面相同,指定 type 为 satori 即可。
- type: satori

# 这里的 token 与上面的相同,
# 但你也可以进行更换,让每个服务使用不同的服务密码。
token: '8b3b9d03d3f053ae02712a3106e28e178c14c3d1d7a1be73dcf7b763e83b1485'

# satori 服务的默认端口为 5500。
port: 5500
#

修改这里的全局配置

这里的token是随机生成的 每个人的不一样 我们只需要在 type类型为red这里 添加一个服务器地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
servers:
# type:服务类型
#
# 开启 red 服务只需要指定 type 为 red 即可。
- type: red

# token:服务密码
#
# Chronocat 已经自动生成了随机密码。要妥善保存哦!
# 客户端使用服务时需要提供这个密码!
token: '8b3b9d03d3f053ae02712a3106e28e178c14c3d1d7a1be73dcf7b763e83b1485'

# port:服务端口
#
# Chronocat 开启 red 服务的端口,默认为 16530。
port: 16530
listen: localhost # host

在这个port:16530下面加一句

像我这样

如果你是服务器 你可以把服务器地址填成公网则把localhost改成0.0.0.0

1
2
3
请记住你设置的服务器地址
请记住type-red下的token
请记住type-red下的port

返回机器人的文件夹 打开env.dev

添加如下内容

1
2
3
4
5
6
7
8
9
RED_BOTS='
[
{
"port": "xxx", # 端口
"token": "xxx", # token
"host": "xxx" # 服务器地址
}
]
'

这里为博主修改好的

保存 继续启动nonebot

如果不出意外 你bot的消息会出现在控制台上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PS E:\test> nb run
10-14 18:26:55 [SUCCESS] nonebot | NoneBot is initializing...
10-14 18:26:55 [INFO] nonebot | Current Env: dev
10-14 18:26:56 [SUCCESS] nonebot | Succeeded to load plugin "echo" from "nonebot.plugins.echo"
10-14 18:26:56 [SUCCESS] nonebot | Running NoneBot...
10-14 18:26:56 [INFO] nonebot | Application startup completed.
10-14 18:26:56 [INFO] nonebot | RedProtocol | Bot 35******** connected, Chronocat Version: 0.0.52
10-14 18:26:57 [SUCCESS] nonebot | RedProtocol 35******** | [message.group]: Message from 2065708068 in 『纱****************[image: {'md5': 'eaedd389*****************', 'size': '22911', 'id': '7289************', 'uuid': '312*******', 'path': 'F:\\QQ\\**************************************************', 'width': 321, 'height': 335}]
10-14 18:27:00 [SUCCESS] nonebot | RedProtocol 35******** | [message.group]: Message from ULTRAMAN THE NEXT in 『纱***********总群: 6
10-14 18:27:03 [SUCCESS] nonebot | RedProtocol 35******** | [message.group]: Message from 2065******** in ******是笨蛋[image: {'md5': '68af1fafbb*************', 'size': '16316', 'id': '728**************', 'uuid': '228*********', 'path': 'F:\\QQ\\***************************************************', 'width': 371, 'height': 351}]
10-14 18:27:03 [INFO] nonebot | Shutting down
10-14 18:27:03 [INFO] nonebot | Waiting for application shutdown.
10-14 18:27:03 [INFO] nonebot | Application shutdown complete.
PS E:\test>

这样已经部署成功了

插件编写示例

写法和gocq的差不多 但是部分api暂不支持

1
2
3
4
5
6
7
8
9
from nonebot import on_command
from nonebot.adapters.red.event import GroupMessageEvent
from nonebot.adapters.red.message import MessageSegment

a = on_command("测试")

@a.handle()
async def _(event: GroupMessageEvent):
await a.finish(f"bingyue->{event.get_user_id()} ok"+MessageSegment.face('124'))

效果

最后

编写不容易,该框架的写法和gocq基本一致,基本能日用了,坏处就是得挂个qqnt

唉 傻逼腾讯


目前可用的QQ机器人hook框架-Chronocat教程(复活?)
http://blog.bingyue.top/2023/10/14/chronocat_1/
作者
bingyue
发布于
2023年10月14日
许可协议