插件的后台页和设置
插件可以有一张设置表单(网页后台「插件中心 → 设置」),也可以在网页后台加自己的页面。设置由装的人填,插件只读。
设置表单
声明了 webui.plugin_panel 的插件,可以在入口对象上实现 panel_schema(),返回要画的表单:
def panel_schema(self):
return {"sections": [
{"title": "在哪工作", "fields": [
{"path": "channel_id", "type": "string", "label": "频道编号"},
{"path": "guild_ids", "type": "id_list", "label": "只在这些服务器"},
{"path": "enabled_at_night", "type": "boolean", "label": "夜里也发"},
]},
]}
type是string、integer、boolean、id_list、string_list、json之一。path是配置里的位置,可以用点连起来(limits.daily);以_id、_ids结尾的当成 Discord 编号,按文字存,不丢精度。- 表单只改列出来的那几项,其余配置原样带回去。
- 没实现
panel_schema()、或者它抛错了,后台给一个编辑完整配置的框。
插件里用 context.config() 读保存好的配置(只读)。配置里像密钥的字段只能写引用(环境变量、文件、钥匙串),写明文会被拒。
自己的页面
声明了 register_webui_page 的插件,在 setup 里调 context.register_webui_page({"title": "…", "path": "…"}),页面出现在网页后台里;清单的 webui_pages 里也可以直接写。
接口
后台用的这几个接口,插件自己的前端也能用(要登录):
GET /api/plugins/<插件编号>/panel:表单描述、现在的配置、健康、托管人格;PUT /api/plugins/<插件编号>/config:保存配置;PUT /api/plugins/<插件编号>/hosting:换托管人格,只认现有的人格,空着就是默认人格(插件设置里的「托管人格」用它,3.10)。
没做到的
- 表单字段只有六种,没有下拉选项、没有「从这个服务器的频道里选」的选择器。
- 插件的页面只是在后台登记一个入口,画什么、怎么画要插件自己做。