mirror of
https://github.com/chrononeko/chronocat.git
synced 2024-11-23 00:12:13 +00:00
103 lines
5.2 KiB
Plaintext
103 lines
5.2 KiB
Plaintext
---
|
||
title: 介绍 Chronocat v0.2
|
||
description: 回顾 Chronocat v0.2 的新功能。
|
||
slug: '020'
|
||
authors:
|
||
- name: Team Chrononeko
|
||
title: Chrononeko 团队
|
||
url: https://github.com/chrononeko
|
||
tags: [release]
|
||
date: 2024-03-31T06:25:41.877Z
|
||
hide_table_of_contents: false
|
||
---
|
||
|
||
import Link from '@docusaurus/Link'
|
||
|
||
虽然 Chronocat v0.2 发布距今已经过去了近一个月,但仍然有必要介绍 v0.2 的更改。我们一起来看一看。
|
||
|
||
{/* truncate */}
|
||
|
||
## 引擎
|
||
|
||
Chronocat v0.2 进行了完全的重写,其中最重大的变化就是「引擎」的引入。
|
||
|
||
Chronocat v0.2 由 Chronocat Shell 和多种引擎组成。其中,Chronocat Shell
|
||
负责与功能实现无关的逻辑,例如配置文件的读取、Satori 服务的启动和管理和 API
|
||
调用参数的校验等。具体功能的实现由各个引擎负责。
|
||
|
||
Team Chrononeko 开发和维护的引擎可以在 [「安装引擎」页面](/guide/install/engine) 查看。目前有三个引擎可供使用:
|
||
|
||
- **chronocat-api**:实现了 Satori 服务的绝大多数 API,包括发送消息和各类查询 API。
|
||
- **chronocat-event**:实现了事件的监听和推送。
|
||
- **poke**:实验性的引擎,实现了戳一戳消息的接收。
|
||
|
||
新架构给 Chronocat 提供了这些优势:
|
||
|
||
- **引擎的自定义搭配**:如果你只想实现 RSS 推送,或者你只想存档群内聊天,那么你可以分别只安装
|
||
choronocat-api 或 chronocat-event 引擎,即可实现你的需求。
|
||
- **功能实现与 Shell 解耦**:各个引擎可以独立更新功能,不需要修改 Chronocat Shell 代码。
|
||
- **为更多引擎做准备**:未来 Chronocat 会有更多引擎加入,新的引擎可以直接支持当然版本的 Chronocat
|
||
Shell;这意味着新的引擎发布后你可以直接下载安装新的引擎,而无需先升级 Chronocat Shell 或现有引擎。
|
||
|
||
我们马上将会有一个新的引擎发布,不要错过!
|
||
|
||
## 数据结构校验
|
||
|
||
除了上述的架构更改外,v0.2 新增的一个主要功能就是对请求数据结构的校验。现在,所有 API
|
||
请求都会先进行校验,验证合法之后才会被传入运行。数据结构使用 TypeScript
|
||
定义,同一份代码会被同时用于传入参数的校验和官网文档的生成。这从根本上保证了 Chronocat API
|
||
文档中指示的参数与实际验证的参数之间的一致性。此外,如果结构校验出现错误,错误会以 400
|
||
错误码+中文说明的方式直接返回,极大地方便了临时使用或代码调试等场景下的 API 请求。下图是一个使用 Postman
|
||
查看结构校验错误的示例。
|
||
|
||
![使用 Postman 查看结构校验错误](./validate.png)
|
||
|
||
## Red 服务的移除
|
||
|
||
在 [Chronocat v0.1 发布](/blog/010) 中我们已经提到,Chronocat v0.2 将会移除 Red 服务。除了 Red
|
||
协议自身的问题以外,Chronocat v0.2 的新架构也是我们无法继续提供 Red 服务的一个原因。
|
||
|
||
Red 协议是 QQ 内部使用的协议,而 chronocat-api 和 choronocat-event 两个引擎内部会使用 Red
|
||
数据结构进行消息的解析和处理。在 v0.2 中,除了上述两个引擎以外,其他引擎均不使用 Red
|
||
数据结构进行消息处理。
|
||
|
||
这就产生了一个问题: **若要支持 Red 服务,那么其他引擎需要将自己的数据结构手动转换为 Red!**
|
||
|
||
手动转换为 Red 结构听起来是可行的,然而实际上并不是。这是由于 Red 协议自身的定位所导致的:Red
|
||
协议会直接反映 QQ 内部的数据结构,以提供最全的数据支持。这一点在 [v0.0.50 发布](/blog/0050)
|
||
中已有提到。这意味着,Red 的数据结构会随着 QQ 的版本更新而发生更改——实际上,几乎每次的 QQ
|
||
更新都会伴随着数据结构更改。这意味着 **没有一种稳定的结构可以用来转换到 Red**。
|
||
|
||
以戳一戳引擎为例,虽然现在可以在 Red 内添加自定义字段,但如果未来 QQ
|
||
更新提供了其他字段,那么是否适配 QQ 官方的新字段就会变成问题。
|
||
**适配意味着这对现有 Bot 是破坏性更改,而不适配意味着 Red 将无法正确反映 QQ 内部的数据结构,还可能与 QQ 未来的更新出现冲突。**
|
||
这是我们最终选择放弃 Red 服务的原因。
|
||
|
||
Chronocat v0.1 将会继续更新,同时提供 Red 服务支持。有需要使用 Red 的小伙伴仍然可以在 v0.1 文档页面下载到 Chronocat v0.1。
|
||
|
||
## 旧代码逻辑的弃用
|
||
|
||
Chronocat v0.0.x 中有很多陈旧代码,这些代码随着 QQ 自身的升级已不再需要使用,移除这些代码也可以增加 Chronocat
|
||
的稳定性。Chronocat v0.2 移除了这些无用代码。未来,我们也会把这些更改同步至 Chronocat v0.1。
|
||
|
||
## 立即尝试
|
||
|
||
目前 Chronocat 的最新版本为 v0.2.7,你现在就可以前往安装或更新 Chronocat。
|
||
|
||
<Link
|
||
className="button button--secondary button--lg button--normal"
|
||
to="/guide/install/shell"
|
||
>
|
||
<span>前往安装</span>
|
||
</Link>
|
||
|
||
## 遇到问题?
|
||
|
||
如果在使用 Chronocat 的途中遇到了任何问题,你都可以通过 [社区](/more/community)
|
||
途径反馈给我们,我们将尽力解决你的问题!
|
||
|
||
## 致谢
|
||
|
||
一如既往地感谢在这条道路上坚持探索的大家——以及看到这里的你——是你们让 Chronocat
|
||
变成可能。谢谢!
|