From 381d4ed797b851cdbaccbd430614e17216644b73 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Sun, 17 Nov 2024 11:55:29 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E6=B7=BB=E5=8A=A0=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=AE=9E=E4=BD=93=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.mts | 2 +- docs/assets/image/plugin_dev_messages_01.png | Bin 0 -> 34288 bytes docs/plugin/dev/api-ref.md | 8 +- docs/plugin/dev/messages.md | 74 +++++++++++++++++++ docs/plugin/dev/tutor.md | 8 +- 5 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 docs/assets/image/plugin_dev_messages_01.png create mode 100644 docs/plugin/dev/messages.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 896ca0332..aaa9d79c6 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -134,8 +134,8 @@ export default defineConfig({ items: [ { text: "基础教程", link: "/plugin/dev/tutor" }, { text: "消息平台实体", link: "/plugin/dev/messages" }, - { text: "组件扩展", link: "/plugin/dev/extension" }, { text: "API 参考", link: "/plugin/dev/api-ref" }, + { text: "组件扩展", link: "/plugin/dev/extension" }, ] }, // { text: "技术信息", link: "/plugin/tech-info" }, diff --git a/docs/assets/image/plugin_dev_messages_01.png b/docs/assets/image/plugin_dev_messages_01.png new file mode 100644 index 0000000000000000000000000000000000000000..4d23b9a9a64ea0d24fef9fe614cba80507166f66 GIT binary patch literal 34288 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 p-}29ktS`!fbbzmvv4FO#s}zNU;C_ literal 0 HcmV?d00001 diff --git a/docs/plugin/dev/api-ref.md b/docs/plugin/dev/api-ref.md index a476bfb2f..70307af43 100644 --- a/docs/plugin/dev/api-ref.md +++ b/docs/plugin/dev/api-ref.md @@ -11,26 +11,26 @@ ### 回复消息 ```python -ctx.reply(message_chain: mirai.MessageChain) +ctx.reply(message_chain: MessageChain) ``` 回复此次事件的发起会话。 -- `message_chain`:[YiriMirai 的 MessageChain 对象](https://yiri-mirai.wybxc.cc/docs/basic/message-chain),若用户使用的不是 YiriMirai 适配器,程序也能自动转换为目标消息链 +- `message_chain`:[消息链对象](./messages.md),程序能自动转换为目标消息平台消息链 ### 发送主动消息 > 由于 QQ 官方 API 对主动消息的支持性很差,故若用户使用的是 QQ 官方 API,发送主动消息可能会失败 ```python -ctx.send_message(target_type: str, target_id: str, message_chain: mirai.MessageChain) +ctx.send_message(target_type: str, target_id: str, message_chain: MessageChain) ``` 发送主动消息给目标。 - `target_type`:目标类型,可选值:`"person"`、`"group"` - `target_id`:目标 ID(QQ 号或群号) -- `message_chain`:[YiriMirai 的 MessageChain 对象](https://yiri-mirai.wybxc.cc/docs/basic/message-chain),若用户使用的不是 YiriMirai 适配器,程序也能自动转换为目标消息链 +- `message_chain`:[消息链对象](./messages.md),程序能自动转换为目标消息平台消息链 ## 事件处理 diff --git a/docs/plugin/dev/messages.md b/docs/plugin/dev/messages.md new file mode 100644 index 000000000..c329eab10 --- /dev/null +++ b/docs/plugin/dev/messages.md @@ -0,0 +1,74 @@ +# 消息平台实体 + +:::info 目录 +[[toc]] +::: + +LangBot 支持多种消息平台,但每个消息平台的`消息实体`格式均不相同,为了屏蔽这些差异,LangBot 具有一套统一的标准。插件开发者只需要掌握并在插件中使用此页所述的消息实体,LangBot 内部的消息处理逻辑能够自动完成消息的解析和转换。 + +:::info +LangBot 的消息平台实体是基于 [YiriMirai](https://github.com/YiriMiraiProject/YiriMirai) 的实现改造的 +::: + +## 消息链 + +消息平台的`消息`不同于用于 AI 交互的消息,消息平台的消息以`消息链`的形式描述,QQ 上展示的每一个独立的消息就是一条消息链,消息链中可以包含`文字`、`图片`、`@组件`等多种`消息链组件`,例如: + +![](/assets/image/plugin_dev_messages_01.png) + +这就是一个消息链,包含 一个 Plain 组件(Hello World)和 一个 Image 组件(乌萨奇) + +消息链和消息链组件的定义位于`pkg/platform/types/messages.py`中。 + +### 构造消息链 + +请先引入`pkg.platform.types`包,才能使用其中的消息组件。 + +```python +from pkg.platform.types import * + +# 构建一个包含文字 Hello LangBot 和图片(从URL获取)的消息 +msg_chain = MessageChain([ + Plain("Hello LangBot"), + Image(url='https://qchatgpt.rockchin.top/langbot-logo.png') +]) + +# 构建一个包含 @全体成员 和文字 Hello LangBot 的消息 +msg_chain = MessageChain([ + AtAll(), + Plain("Hello LangBot") +]) + +# 构建一个包含 @指定成员 和文字 Hello LangBot 的消息 +msg_chain = MessageChain([ + At(123456), + Plain("Hello LangBot") +]) +``` + +目前支持的消息链组件: + +- `Source` 源消息链信息,如果是从消息平台收到的消息,都会在消息链最前端包含此组件,记录消息信息 +- `Plain` 纯文本消息 +- `Quote` 引用消息 +- `Image` 图片消息 +- `AtAll` @全体成员消息 +- `At` @指定成员消息 +- `Voice` 语音消息 + - 需要检查消息平台支持性 +- `Forward` 转发消息 + - 在很多平台不受支持,不建议使用 +- `File` 文件消息 + +具体使用方式可以查看源码`pkg/platform/types/messages.py`中的定义。 + +## 消息平台事件 + +这些事件不同于 LangBot 插件事件,是消息平台系统独立的一套事件系统。这些事件是 LangBot 插件事件的源事件,可以从每个 Query.message_event 取得。 + +消息平台事件定义位于`pkg/platform/types/events.py`中。 + +## 其他实体 + +除了上述实体之外,还有`好友 Friend`和`群 Group`等实体,这些实体的定义位于`pkg/platform/types/entities.py`中。 +他们一般被包含于上述事件对象中,可以从中取得一些未被包含在插件事件中的信息。 diff --git a/docs/plugin/dev/tutor.md b/docs/plugin/dev/tutor.md index a7e665952..e3a943fac 100644 --- a/docs/plugin/dev/tutor.md +++ b/docs/plugin/dev/tutor.md @@ -208,7 +208,7 @@ async def access_web(self, query, url: str): 若一个事件是一次请求(用户发送消息)中的事件,其事件对象中会含有`query`对象,这个对象中包含了此次请求(即用户发送一条消息的处理过程,一个请求过程可能会触发多个事件)处理过程中的上下文数据。 所有支持的事件,请查看`pkg.plugin.events`文件中的每个事件类的注释。 -关于`YiriMirai`支持的消息链组件,请查看 [YiriMirai的文档](https://yiri-mirai.wybxc.cc/docs/basic/message-chain) +关于`消息链组件`,请查看 [消息平台实体](./messages) ### BasePlugin 结构 @@ -218,4 +218,8 @@ async def access_web(self, query, url: str): #### self.host -在插件的方法中访问`self.host`即为`pkg.plugin.context.APIHost`类的对象,提供了主程序的一些API,详细请查看其源码。 \ No newline at end of file +在插件的方法中访问`self.host`即为`pkg.plugin.context.APIHost`类的对象,提供了主程序的一些API,详细请查看其源码。 + +### API 参考 + +关于插件可以调用的 API,请查看 [API 参考](./api-ref)