Skip to content

内部接口 可选

TIP

这是一个可选功能。

Satori 提供了访问任意平台原生接口的能力。这意味着,你可以大多数情况下编写通用代码,并在需要的时候使用原生接口来实现平台特定功能。

这些原生 API 和事件被统称为内部接口。你可以名为 internal 的路由或事件来访问它们。

API 扩展

SDK 可以通过 /{path}/{version}/internal/{method} 路由代理平台原生 API。通信方式与 HTTP API 类似。返回值与平台返回值一致。

一个合法的请求示例形如:

text
POST /v1/internal/get_channel
Content-Type: application/json
Authorization: Bearer 1234567890
X-Platform: discord
X-Self-ID: 1234567890

["1234567890"]

事件扩展

平台原生事件

SDK 可以通过 internal 事件的 _type_data 属性代理平台原生事件。它的结构如下:

字段类型说明
idnumber事件 ID
typestring事件类型 (固定为 internal)
platformstring接收者的平台名称
self_idstring接收者的平台账号
timestampnumber事件的时间戳
_typestring原生事件类型
_dataobject原生事件数据

标准事件的扩展字段

标准事件的平台原生字段也可以通过上述 _type_data 访问。它的结构如下:

字段类型说明
typestring事件类型 (不应该是 internal)
_typestring平台通用名称
_dataobject原生事件数据
其他字段其他标准事件字段

TIP

有些平台原生事件可以直接对应到标准事件。当这些事件触发时,SDK 可以同时触发标准事件和平台原生事件。这两个事件都带有 _type_data 字段,但这两个字段的值可能是不同的。

消息元素扩展

平台原生消息元素

平台可以提供原生消息元素,但需要加上平台通用名称作为前缀。下面是一个例子:

html
<kook:card size="lg">
  <kook:countdown end-time="1608819168000"/>
</kook:card>

标准元素的扩展属性

标准元素的平台原生属性也可以通过加上平台通用名称作为前缀的方式声明。下面是一个例子:

html
<!-- src 是 audio 元素的标准属性。 -->
<!-- 但 cover 并未标准化,所以需要加前缀。 -->
<audio src="url1" kook:cover="url2"/>

TIP

平台原生消息元素的属性是否需要前缀由 SDK 实现自行决定。如果某个消息元素希望在未来标准化,那么加上前缀可以降低迁移成本。如果没有标准化需要,那么去掉前缀在书写上更方便。