2.7 KiB
2.7 KiB
插件模板(MTSS 结构)
按《插件结构标准 + 插件配置文件标准》编写的可复制插件骨架,含配置标准 + Web 子应用样例。
结构(MTSS)
nonebot_plugin_template/
├── __init__.py # 入口(薄): require + meta + 导入 + config.register_config() + register_web_plugin
├── config.py # 配置注册(register_model_config / register_config_items / register_object_set)
├── handlers/ # Trigger 层
│ ├── __init__.py
│ └── entry.py # on_command 示例
├── services/ # Service 层(不 import nonebot)
│ └── main.py
├── models.py # 模型/异常
├── repository.py # Model 数据访问(唯一读写入口)
├── web/ # 可选: 插件自带 Web 子应用(FastAPI)
│ ├── __init__.py
│ └── admin.py # build_admin_app() → 挂载到 /api/template
├── data/ # 运行时数据
└── utils/ # 纯工具
使用
- 把
nonebot_plugin_template目录复制到hexi/plugins/nonebot_plugin_<name>。 - 全局搜索替换
nonebot_plugin_template→nonebot_plugin_<name>,包括_PLUGIN_ID相关说明。 - 在
__init__.py改__plugin_meta__的 name/description/usage,并把register_web_plugin("template", ...)的 id/name/icon 改掉;Web id 只能使用安全的短标识,不要直接使用带点的模块名。 - 在
config.py改成你要的配置项;在handlers/entry.py改成你的命令/触发。 - 重启 bot;/hub 插件页能看到配置,点「打开 Web 页面」进入
/hub/template(子应用挂在/api/template)。
Web 子应用
web/admin.py::build_admin_app()返回一个 FastAPI 实例,经register_web_plugin由 hub 挂载到/api/template。- 鉴权统一
hexi.web_hub.web_auth.require_admin;示例端点:GET /ping、GET /config(读插件配置)。 - 想要更丰富的管理页:前端放
web/dist/,在 admin.py 里挂StaticFiles+ SPA 兜底即可(参考hexi/web_hub)。
约定
plugin_id= 模块名(自动取__package__;web 子应用用__package__.rsplit(".", 1)[0])。- Trigger/View 可 import nonebot;Service/Model/repository 尽量不 import nonebot。
- 配置默认值写进 schema,Web 自动回填;敏感字段
secret=True。GET 只显示****;保存配置时带上 GET 返回的revision,修改冲突会返回 409。 - 同一
plugin_id多次注册会自动合并(getter/apply 组合),但字段 key 应由单一注册者负责,避免定义冲突。 - Service 中的文件/数据库访问应使用异步 repository 或
asyncio.to_thread,不要阻塞事件循环。