docs:完善文档

This commit is contained in:
Azide 2022-07-10 17:43:44 +08:00
parent 28c73f2fba
commit 686b73ae25
2 changed files with 52 additions and 3 deletions

View File

@ -38,7 +38,10 @@ Nonebot 项目使用了全异步的处理方式所以你需要对异步Pyt
## 基本概念 ## 基本概念
- `nonebot_bison.post.Post`: 可以理解为推送内容,其中包含需要发送的文字,图片,链接,平台信息等 - `nonebot_bison.post`: 可以理解为推送内容,其中包含需要发送的文字,图片,链接,平台信息等,分为:
- `nonebot_bison.post.Post`: 简单的推送内容格式,需要发送的内容由 bison 处理
- `nonebot_bison.post.CustomPost`: 基于 markdown 语法的,自由度较高的推送内容格式
- 详细的介绍可参见[生成 bison 的推送文本](#生成bison的推送文本)
- `nonebot_bison.types.RawPost`: 从站点/平台中爬到的单条信息 - `nonebot_bison.types.RawPost`: 从站点/平台中爬到的单条信息
- `nonebot_bison.types.Target`: 目标账号Bilibili微博等社交媒体中的账号 - `nonebot_bison.types.Target`: 目标账号Bilibili微博等社交媒体中的账号
- `nonebot_bison.types.Category`: 信息分类,例如视频,动态,图文,文章等 - `nonebot_bison.types.Category`: 信息分类,例如视频,动态,图文,文章等
@ -211,3 +214,44 @@ class Weibo(NewMessage):
#将需要bot推送的RawPost处理成正式推送的Post #将需要bot推送的RawPost处理成正式推送的Post
... ...
``` ```
## 生成 bison 的推送文本
### 什么是`nonebot_bison.post`
可以认为`nonebot_bison.post`是最终要交付给 bison 推送到群内的内容,经过`parse`函数处理过后的报文应该返回属于`nonebot_bison.post`下的某个类
目前 bison 所支持的类有:
- `nonebot_bison.post.Post`
- `nonebot_bison.post.CustomPost`
### 什么是`nonebot_bison.post.Post`
Post 类能接受的消息分为`text``pics`,对应文本与图片类消息,其中 pics 接受的是一个列表 List列表中的值可以为 url、base64 或者 bytes。
Post 会将`text``pics`分为若干条消息进行分别发送
使用`compress`参数将所有消息压缩为一条进行发送。
使用`extra_msg`可以携带额外的消息进行发送
使用`override_use_pic`参数可以无视全局配置中的 bison_use_pic 配置进行强制指定
可参考[Post 的用法](https://github.com/felinae98/nonebot-bison/blob/v0.5.4/src/plugins/nonebot_bison/platform/arknights.py#L227)
### 什么是`nonebot_bison.post.CustomPost`
CustomPost 类能接受的消息为[`List[MessageSegment]`](https://github.com/botuniverse/onebot-11/blob/master/message/array.md#%E6%B6%88%E6%81%AF%E6%AE%B5)
::: tip
消息段Message Segment 或 Segment
表示聊天消息的一个部分,在一些平台上,聊天消息支持图文混排,其中就会有多个消息段,分别表示每个图片和每段文字。
:::
准确来说CustomPost 只支持使用 MessageSegment 内的`text``image`类型CustomPost 会将 List 中的每个`text`类型元素理解为一个单行的 text 文本,
当然markdown 语法可以在每个`text`类型元素使用,但这样的话,在不开启`bison_use_pic`**全局配置项** 的情况下bison 会将写在 text 类型元素里的 markdown 语法按原文推送,不会解析。
对于上述情况,建议开启 CustomPost 的`only_pic`选项,这样 CustomPost 只会发送经过 markdown 语法渲染好的图片,而非文本消息。
::: details CustomPost 例子
```python
async def parse(self, raw_post:RawPost) -> str:
#假定传入的raw_post为List[MessageSegment]
#do something...
return CustomPost(message_segments=raw_post, only_pic=True)
```
:::

View File

@ -1,5 +1,6 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from pathlib import Path from pathlib import Path
from typing import Optional
from nonebot.adapters.onebot.v11.message import Message, MessageSegment from nonebot.adapters.onebot.v11.message import Message, MessageSegment
from nonebot.log import logger from nonebot.log import logger
@ -12,10 +13,14 @@ from .abstract_post import AbstractPost, BasePost
class _CustomPost(BasePost): class _CustomPost(BasePost):
message_segments: list[MessageSegment] = field(default_factory=list) message_segments: list[MessageSegment] = field(default_factory=list)
css_path: str = None # 模板文件所用css路径 css_path: Optional[str] = None # 模板文件所用css路径
only_pic: Optional[bool] = False # 开启时只发送图片
async def generate_text_messages(self) -> list[MessageSegment]: async def generate_text_messages(self) -> list[MessageSegment]:
return self.message_segments if not self.only_pic:
return self.message_segments
else:
return self.generate_pic_messages()
async def generate_pic_messages(self) -> list[MessageSegment]: async def generate_pic_messages(self) -> list[MessageSegment]:
require("nonebot_plugin_htmlrender") require("nonebot_plugin_htmlrender")