插件清单
每个插件目录里都有一份 plugin.json:它是谁、入口在哪、要哪些能力、在 Discord 和 QQ 上占用哪些命令名。装之前,这份清单会原样给装的人看。
一份清单
{
"id": "weather-notes",
"name": "天气小记",
"version": "1.0.0",
"description": "每天早上在指定频道发一条当地天气",
"entrypoint": "plugin.py",
"permissions": ["discord.channel.send", "storage.private", "webui.plugin_panel"],
"optional_permissions": [],
"min_host_version": "0.1.0",
"discord": { "commands": [], "legacy_prefixes": [] },
"qq": { "command_prefixes": [] },
"webui_pages": [],
"actions": []
}
每一项
id:插件编号,装上以后不能改;动作名、按钮的 custom_id 前缀都从它来。name、version、description:给人看的;description最多 400 字。entrypoint:入口文件(默认plugin.py),要导出一个叫plugin的对象,带async setup(context)和async teardown()(3.7)。permissions:必需的能力,装的时候一次确认;optional_permissions:可选的,装上时不给,在插件设置里一项一项打开。同一项不能两边都写;写了宿主不认识的能力,清单直接被拒(3.9)。min_host_version:最低要求的 Aeria 版本。discord.commands:要注册的斜杠命令的顶层名字(小写字母、数字、-、_,最多 32 个字);discord.legacy_prefixes:文字命令的前缀(像!feedback)。没在这里写的,运行时注册不上(3.10)。qq.command_prefixes:QQ 上的文字命令前缀(像.反馈,以.或!开头)。webui_pages:要在网页后台加的页面(3.11)。actions:要登记给人格用的动作。
放在哪
一个插件一个目录,放在插件目录里(默认 data/plugins/<插件编号>/)。从插件中心装的,宿主下载、校验大小(默认上限 10 MB)以后放进去;也可以自己把目录放进去,再在插件中心里确认能力、启用。
没做到的
- 清单里没有「这个插件的作者、主页、许可证」这几项,装的人只能从说明里看。
- 还没有插件签名:插件源给的包,宿主只核对大小和清单格式,不核对是谁发的。