结构调整
视频解析多图/多媒体结构 消息体适配
This commit is contained in:
@@ -84,6 +84,7 @@ nonebot_plugin_xxx/
|
||||
## 4. `__init__.py` 标准职责(固定顺序)
|
||||
|
||||
1. `__plugin_meta__ = PluginMetadata(name=..., description=..., usage=..., type="application")`。
|
||||
> **type 取值(NoneBot 发布规范)**:`application`(向机器人用户提供功能,支持热插拔/热重载)或 `library`(为其他插件提供能力,不可热拔插)。新插件默认 `application`。本仓库的 `hexi/core`、`hexi/web_hub` 已从插件目录移出,作为机器人核心模块(**非插件**),直接不参与热拔插。
|
||||
2. 声明依赖 `require("nonebot_plugin_alconna")` 等。
|
||||
3. 显式导入子模块(`from . import handlers, services, utils`),注册 matcher/handler。
|
||||
4. **配置注册**(在 config 就绪后):`register_model_config`(pydantic Config)或 `register_config_items` / `register_object_set`(来源无关)。
|
||||
@@ -108,7 +109,7 @@ config = get_plugin_config(Config)
|
||||
|
||||
### 4.2 来源无关型(模块常量 / 配置文件 / DB)
|
||||
```python
|
||||
from hexi.config_standard import register_config_items, register_object_set
|
||||
from hexi.web_hub.config_standard import register_config_items, register_object_set
|
||||
register_object_set(__name__, "groups", [ {item_schema...} ], key_field="group_id",
|
||||
getter=get_groups, setter=set_groups, nosave=True)
|
||||
```
|
||||
@@ -133,20 +134,20 @@ register_object_set(__name__, "groups", [ {item_schema...} ], key_field="group_i
|
||||
- `services/`:业务编排,可依赖 repository / 外部 API;把「一个业务动作」收敛到一个方法。
|
||||
- **禁止** `from x import *`、`except: pass`、`print()`;用 `logger`。
|
||||
- async handler 内避免同步阻塞(`requests` / `time.sleep` / 同步爬虫);需要就 `asyncio.to_thread`。
|
||||
- 命令触发:需要 @ 用 `rule=to_me()`;全局命令注意与其它插件冲突;高开销命令加冷却/限频(`hexi_core` 的 `cooldown/rate_limit`)。
|
||||
- 命令触发:需要 @ 用 `rule=to_me()`;全局命令注意与其它插件冲突;高开销命令加冷却/限频(`hexi/core` 的 `cooldown/rate_limit`)。
|
||||
- 外部 API:统一超时 + 重试 + 失败降级/用户提示。
|
||||
|
||||
## 8. Web 接入标准
|
||||
|
||||
- 需要独立 Web 页:`register_web_plugin(id, name, icon, lambda: build_app(), module_name=__name__)`,hub 启动自动挂载 `/api/<id>`。
|
||||
- 需要 Web 配置:`register_plugin_config` / `register_model_config` / `register_config_items` / `register_object_set`(schema 驱动表单)。
|
||||
- 鉴权统一用 `hexi.web_auth.require_admin`(OAuth2 + SQLite),不要自造一套。
|
||||
- 鉴权统一用 `hexi.web_hub.web_auth.require_admin`(OAuth2 + SQLite),不要自造一套。
|
||||
- 敏感字段 `secret=True`,前端掩码;写回允许明文。
|
||||
|
||||
## 9. 插件迁移检查清单
|
||||
|
||||
- [ ] 包名改为 `nonebot_plugin_*`,位置在 `../../hexi/plugins`。
|
||||
- [ ] 有 `__plugin_meta__`,`type="application"`。
|
||||
- [ ] 有 `__plugin_meta__`,`type="application"`(核心/框架插件标 `library`,不参与热拔插)。
|
||||
- [ ] 配置已接入统一标准(Web 能读能改,运行期/重启生效)。
|
||||
- [ ] 命令在 `handlers/`,业务在 `services/`,工具在 `utils/`。
|
||||
- [ ] 数据访问集中(repository / services),原子写 / 事务。
|
||||
|
||||
Reference in New Issue
Block a user