Files
mai-bot/plugin-templates/MaiBot-Napcat-Adapter/docs/verification.md

56 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 核验与兼容性说明
## 1. 这次核验做了什么
- 扫描 `plugins/MaiBot-Napcat-Adapter/apis/*.py` 中全部 `@API(..., public=True)` 公开接口。
- 对每个透传 API 反查其底层 NapCat action。
- 用 NapCat 官方文档 [https://napcat.apifox.cn/](https://napcat.apifox.cn/) 逐项确认底层 action 页面是否存在。
- 用浏览器逐页读取官方页面的“请求参数”结构;遇到官方页左侧只显示泛型 `object` 时,再补读同页 `curl --data-raw` 示例。
- 对请求示例少于隐藏 schema 的页面,额外抓取官方页原始 HTML核对 Apifox 内嵌的 request body schema。
- 对强类型封装 API额外对照 `plugins/MaiBot-Napcat-Adapter/services/query_service.py` 确认适配器实际下发的 body。
## 2. 覆盖范围
- 适配器公开 API 总数:`164`
- 其中适配器自带通用入口:`2`
- `adapter.napcat.action.call`
- `adapter.napcat.action.call_data`
- 其中可映射到底层 NapCat action 的 API`162`
-`162` 个底层 action 的官方文档页面:`162 / 162` 都已找到并写入 docs
## 3. 参数对齐口径
- 普通透传 API文档写“官方请求字段”适配器自己不裁剪只要求调用方传 `params={...}`
- 强类型封装 API文档写“适配器直接参数”和“官方请求字段”两列明确哪里是适配器收敛过的用法。
- 如果官方页 `Schema` 和同页 `curl` 示例不一致,文档不会替官方做静默判断,而是显式标成 `Schema + 示例``冲突`
## 4. 已确认的官方页例外
| action / API | 官方文档 | 现象 | 文档处理方式 |
| --- | --- | --- | --- |
| `get_online_clients` | [官方](https://napcat.apifox.cn/226657379e0) | 左侧 Schema 只显示 `object`,同页示例请求体给出 `no_cache` | 在文档中按 `示例` 记录 `no_cache` |
| `_set_model_show` | [官方](https://napcat.apifox.cn/227233993e0) | 左侧 Schema 只显示 `object`,同页示例请求体给出 `model``model_show` | 在文档中按 `示例` 记录 |
| `get_mini_app_ark` | [官方](https://napcat.apifox.cn/227738594e0) | 官方页为 `Any Of` 结构,但左侧 Schema 未展开可直接抄用的顶层字段 | 在文档中按同页示例请求体记录当前可见字段 |
| `get_guild_service_profile` | [官方](https://napcat.apifox.cn/226659317e0) | 左侧 Schema 只显示 `object`,同页示例请求体给出 `guild_id` | 在文档中按 `示例` 记录 `guild_id` |
| `get_group_file_url` | [官方](https://napcat.apifox.cn/226658867e0) | 左侧 Schema 只列 `group_id``file_id`,同页示例请求体额外给出 `busid` | 在文档中按 `Schema + 示例` 合并记录 |
| `get_private_file_url` | [官方](https://napcat.apifox.cn/266151849e0) | 左侧 Schema 只列 `file_id`,同页示例请求体额外给出 `user_id` | 在文档中按 `Schema + 示例` 合并记录 |
| `test_download_stream` | [官方](https://napcat.apifox.cn/395355338e0) | 左侧 Schema 当前字段为 `error`,同页示例请求体却使用 `url` | 在文档中标记为 `冲突`,两组字段都写出 |
| `get_stranger_info` | [官方](https://napcat.apifox.cn/226656970e0) | 页面默认示例只写 `user_id`,但原始 HTML 的隐藏 schema 还定义了 `no_cache` | 在文档和实现中按隐藏 schema 记录 `user_id``no_cache` |
| `get_forward_msg` | [官方](https://napcat.apifox.cn/226656712e0) | 页面默认示例只写 `message_id`,但原始 HTML 的隐藏 schema 还定义了 `id` | 在文档和实现中按隐藏 schema 同时支持 `message_id``id` |
| `get_record` | [官方](https://napcat.apifox.cn/226657058e0) | 页面默认示例只写 `file``out_format`,但原始 HTML 的隐藏 schema 还定义了 `file_id` | 在文档和实现中按隐藏 schema 记录 `file``file_id``out_format` |
| `send_poke` | [官方](https://napcat.apifox.cn/250286923e0) | 页面默认示例只写 `user_id`,但原始 HTML 的隐藏 schema 还定义了 `group_id``target_id` | 在文档和实现中按隐藏 schema 记录 `user_id``group_id``target_id` |
| `send_group_sign` | [官方](https://napcat.apifox.cn/230897177e0) | 官方页面存在,但侧边序列化索引缺少常规标题字段 | 文档直接写死官方链接,不依赖侧边索引标题 |
| `send_poke` / `friend_poke` / `forward_group_single_msg` / `send_ark_share` / `send_group_ark_share` / `clean_stream_temp_file` | 对应各自官方页 | 官方侧边序列化索引缺少常规标题字段,但页面本身存在 | 文档直接写死官方链接,不依赖侧边索引标题 |
## 5. 适配器实现侧的对齐与兼容策略
| API | 实际下发 | 与官方字段的关系 |
| --- | --- | --- |
| `adapter.napcat.message.send_poke` | `{"user_id": ..., "group_id"?: ..., "target_id"?: ...}` | 已对齐官方隐藏 schema公开 API 额外保留 `qq_id` 作为旧版兼容别名 |
| `adapter.napcat.message.get_forward_msg` | 调 `get_forward_msg({"message_id"?: ..., "id"?: ...})` | 已对齐官方隐藏 schema至少提供一个字段双字段同时传入时要求一致 |
| `adapter.napcat.file.get_record` | 调 `get_record({"file"?: ..., "file_id"?: ..., "out_format"?: ...})` | 已对齐官方隐藏 schema默认 `out_format="wav"` 仅用于兼容旧行为 |
| `adapter.napcat.account.get_stranger_info` | `{"user_id": ..., "no_cache": ...}` | 已对齐官方隐藏 schema`no_cache` 默认值为 `False` |
- 当前强类型封装 API 已无“缺少官方字段”的已知冲突项。
- 当前仍保留的兼容策略只有两类:`send_poke``qq_id` 旧版别名,以及 `get_record``out_format="wav"` 默认值。