Skip to main content
用存储保存插件状态;用 HTTP 路由把插件变成一个简单处理函数。路由声明写在 manifest headers 中,存储函数直接从 middleware.js 导入。

默认存储

默认存储使用全局 bucket otto,适合保存少量插件状态。
存储值会按字符串保存。保存对象时先 JSON.stringify(...),读取后再 JSON.parse(...)

bucket 名称规则

bucket 是存储命名空间。名称里的 . 表示子级 bucket,例如 shop.orders 表示 shop 下的 orders。运行时最多允许 3 级 bucket,推荐你也最多使用 3 级,避免权限配置、数据迁移和排查问题时层级过深。
string
必填
bucket 名称。不能为空;用 . 分隔层级;每一段都不能为空;最多 3 级。示例:my_pluginmy_plugin.usersmy_plugin.orders.paid
推荐用 插件名.业务域.状态 命名,例如 card_claim.userscard_claim.inventory.active。如果只是小插件,使用一级 bucket,例如 my_plugin
不要把 . 当作普通字符放进同一级名称里。a.b 会被解释为两级 bucket,而不是一个名为 a.b 的单级 bucket。

命名 bucket

命名 bucket 适合把插件状态按插件名或业务域隔离。bucket 负责隔离命名空间,key 负责定位具体记录。
Sender 实例也提供同名 bucket 方法,会额外携带当前 senderid,适合需要由权限系统按当前运行检查 bucket 访问的场景。

HTTP 路由请求

在 manifest 中声明 routermethod 后,脚本可以读取 HTTP 请求并返回响应。Header 声明见 Plugin manifest headers
unknown
必填
response(data) 的响应体。可以是对象、数组、字符串、数字或布尔值。
response(...) 的实际响应示例:
路由运行中调用 reply('text')replyMarkdown('...') 也会写入 response_data,适合返回纯文本;需要返回对象时用 response(data)

顶层路由别名

middleware.js 还导出默认 Sender 绑定的路由读取别名:

下一步

Manifest headers

查看 routermethodparamdependency 声明。

工具和依赖

查看 importModule(...) 和系统工具函数。
最后修改于 2026年6月3日