此文档已弃用。请访问我们的最新文档:https://koishi.chat

编写适配器插件

注意

这里是正在施工的 koishi v4 的文档。要查看 v3 版本的文档,请前往这里

Koishi 通过 适配器 (Adapter) 实现对多账户和跨平台的实现。在我们开始之前,首先你需要了解多机器人在 Koishi 中究竟是以何种方式进行组织的。这个问题用一句话来说就是:一个应用可以有多个平台,每个平台可以有多个适配器,每个适配器可以有多个机器人。在上面的例子中,形如 onebot 的是 平台名称,形如 onebot:http 的是适配器名称

当应用被创建时,它会按照配置创建所有的适配器和机器人实例。如果多个机器人使用了同一种适配器,那么会创建一个适配器实例绑定多个机器人。它们的关系用代码表示就是这样:

class App {
  // 可以使用 adapters[type] 找到对应的适配器
  adapters: Record<string, Adapter>
  // 可以使用 Array 方法遍历全部 bots
  // 也可以使用 bots[`${platform}:${selfId}`] 找到具体的某一个
  bots: Bot[] & Record<string, Bot>
}

class Adapter {
  // 可以使用 Array 方法遍历全部 bots
  // 也可以使用 bots[selfId] 找到具体的某一个
  bots: Bot[] & Record<string, Bot>
  // 所在的 App 实例
  app: App
}

class Bot {
  // 所在的 App 实例
  app: App
  // 所在的 Adapter 实例
  adapter: Adapter
}

当适配器收到一个上报事件时,它会首先对事件进行鉴权,并处理好改事件的响应值。接着这个适配器将按照事件的内容生成一个会话对象,并使用 adapter.dispatch 将其在对应的上下文触发事件。因此,如果你需要编写一个平台支持,你只需要做三件事:

  • 编写这个平台的 Bot 类,实现 Koishi 所需的方法
  • 编写这个平台的 Adapter 类,实现 start() 和 stop() 方法
  • 注册这个 Adapter

一个 Webhook 例子

下面是一个使用 Webhook 的例子。适配器通过 http post 请求接受事件推送。

adapterjsts

一个 WebSocket 例子

WebSocket 的逻辑相比 Webhook 要稍微复杂一些,因此我们提供了一个工具类:

adapterjsts