Skip to content

Commit

Permalink
docs: add adapter config
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed Apr 25, 2021
1 parent 1646d9c commit 16991ec
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 49 deletions.
17 changes: 17 additions & 0 deletions docs/api/adapter/discord.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,20 @@ sidebarDepth: 2
3. 要将机器人拉进你的服务器,点击「OAuth2」,并在网址生成器中勾选 Bot 和机器人所需要的权限
4. 打开生成的链接,选择你具有管理权限的服务器,就成功把机器人添加进去了
5. 将上面的 token 作为机器人配置项即可使用

## 适配器选项

包括全部的 [`WsClient`](../adapter.md#类-adapter-wsclient) 选项和下列额外选项:

### options.discord.endpoint

- 类型: `string`
- 默认值: `'https://discord.com/api/v8'`

要请求的 API 网址。

### options.discord.axiosConfig

- 类型: [`AxiosRequestConfig`](https://github.com/axios/axios#request-config)

用于 discord 适配器的请求配置。
24 changes: 24 additions & 0 deletions docs/api/adapter/kaiheila.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,27 @@ sidebarDepth: 2
- 如果是 Webhook,请记下页面中的 token 和 verify_token,并作为机器人的配置项,同时让 Koishi 暴露一个 URL,填入下方的 Callback URL 中,启动 Koishi 后点击「机器人上线」
- 如果是 WebSocket,则只需记录 token 并作为机器人的配置项即可,你可以在任何时候启动 Koishi
- 页面中的其他值不用管,但请注意 token 不要泄露

## 适配器选项

包括全部的 [`WsClient`](../adapter.md#类-adapter-wsclient) 选项和下列额外选项:

### options.kaiheila.path

- 类型:`string`
- 默认值:`'/kaiheila'`

服务器监听的路径。仅用于 HTTP 通信方式。

### options.kaiheila.endpoint

- 类型: `string`
- 默认值: `'https://www.kaiheila.cn/api/v3'`

要请求的 API 网址。

### options.kaiheila.axiosConfig

- 类型: [`AxiosRequestConfig`](https://github.com/axios/axios#request-config)

用于 kaiheila 适配器的请求配置。
81 changes: 32 additions & 49 deletions docs/api/adapter/onebot.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,15 @@ sidebarDepth: 2

- 标有 <Badge vertical="baseline" text="go-cqhttp" type="warn"/> 的 API 只能基于 go-cqhttp 运行

## 机制说明
## 特性介绍

### 协议选择

目前 Koishi 已经完全实现了 OneBot 所定义的全部三种通信方式,因此它们之间**不存在任何功能上的差别**

但是,HTTP 需要 Koishi 和 OneBot 所处于同一台机器,或所处的机器都拥有公网 IP;而 WebSocket 只需要 Koishi 和 OneBot 所处于同一台机器,或运行 OneBot 的机器拥有公网 IP。因此如果你在服务端运行 CoolQ,同时在个人电脑上调试你的 Koishi 应用,你应当选择使用 WebSocket 模式。

从性能上说,WebSocket 占用的资源会更少(因为不需要每次都建立连接),但是响应速度可能不如 HTTP;另一方面,当一个 Koishi 应用同时管理着多个机器人时,HTTP 能通过快捷调用和服务器复用的方式来提高性能,但是 WebSocket 并没有这些机制。

### 异步调用

Expand All @@ -31,68 +39,36 @@ OneBot 提出了**异步调用**的概念,当 OneBot 服务器受到异步调

```js
// 普通版本
const messageId = await app.sender.sendPrivateMsg(123456789, 'Hello world')
const messageId = await bot.$sendPrivateMsg('123456789', 'Hello world')

// 异步版本,无法获得调用结果
await app.sender.sendPrivateMsgAsync(123456789, 'Hello world')
await bot.$sendPrivateMsgAsync('123456789', 'Hello world')
```

::: tip 提示
::: tip
虽然异步调用方法的名字以 Async 结尾,但是其他方法也是**异步函数**,它们都会返回一个 `Promise` 对象。取这样的名字只是为了与 OneBot 保持一致。
:::

### 快捷回复

Meta 对象还提供了一个快捷回复方法 `session.send`,调用它可以快速实现对原消息的回复。快捷操作的响应速度会高于普通的 Sender API 调用,但是默认情况下这种操作同上面的异步调用一样,这些操作也是无法获得调用结果的。完整的快捷操作列表参见 [Koishi 添加的属性](#koishi-添加的属性)

这里也简单介绍一下快捷操作的原理。当正常使用 HTTP 模式时,每个事件上报和 API 调用都使用了不同的连接。那么快捷操作则相当于将 API 调用作为事件上报的响应。当然,这种做法有着很多限制,例如对 WebSocket 无效,同一个事件只能响应一次,以及需要手动处理响应超时的问题。因此,默认情况下这种优化是不开启的。如果手动配置了 `quickOperationTimeout`,则会将这个配置项作为时间限制,在这个时间限制内第一个调用快捷操作的会享受这种优化(事实上大部分操作都只有一个响应,所以这种优化对 HTTP 往往是非常有效的),之后的所有快捷操作调用都会自动转化为异步调用,这样可以保证快捷操作永远都是可用的。
这里也简单介绍一下快捷操作的原理。当正常使用 HTTP 模式时,每个事件上报和 API 调用都使用了不同的连接。那么快捷操作则相当于将 API 调用作为事件上报的响应。当然,这种做法有着很多限制,例如对 WebSocket 无效,同一个事件只能响应一次,以及需要手动处理响应超时的问题。因此,默认情况下这种优化是不开启的。如果手动配置了 [`quickOperation`](#options-quickoperation),则会将这个配置项作为时间限制,在这个时间限制内第一个调用快捷操作的会享受这种优化(事实上大部分操作都只有一个响应,所以这种优化对 HTTP 往往是非常有效的),之后的所有快捷操作调用都会自动转化为异步调用,这样可以保证快捷操作永远都是可用的。

下面这张图比较了使用 HTTP 时,快捷操作与默认机制的区别:

![quick-operation](/quick-operation.png)

### HTTP 和 WebSocket 应该如何选择?

目前 Koishi 已经完全实现了 OneBot 提供的 HTTP 和 WebSocket 通信方式,因此它们之间**不存在任何功能上的差别**

但是,HTTP 需要 Koishi 和 OneBot 所处于同一台机器,或所处的机器都拥有公网 IP;而 WebSocket 只需要 Koishi 和 OneBot 所处于同一台机器,或运行 OneBot 的机器拥有公网 IP。因此如果你在服务端运行 CoolQ,同时在个人电脑上调试你的 Koishi 应用,你应当选择使用 WebSocket 模式。

从性能上说,WebSocket 占用的资源会更少(因为不需要每次都建立连接),但是响应速度可能不如 HTTP;另一方面,当一个 Koishi 应用同时管理着多个机器人时,HTTP 能通过快捷调用和服务器复用的方式来提高性能,但是 WebSocket 并没有这些机制。

## 事件

metaEvent 系列事件对应这 CQHTTP 插件本身的元事件,**只会在 App 实例触发**。所有这些事件的回调函数都会传入一个 [`Meta` 对象](../guide/message.md#深入-meta-对象)。这些事件的共同点是 `meta.postType` 都为 `'meta_event'`

### 事件:heartbeat

心跳元事件,**仅对 WebSocket 生效**。产生此事件需要通过将配置项 `enable_heartbeat` 设置为 `true`,并可通过 `heartbeat_interval` 配置心跳间隔(单位毫秒)。

### 事件:lifecycle

生命周期事件,**仅对 HTTP 生效**。拥有下面的子事件:
## 机器人选项

- lifecycle/enable: CQHTTP 插件启用
- lifecycle/disable: CQHTTP 插件停用
- lifecycle/connect: 成功建立 WebSocket 连接
### options(.bots[]).type

## App 构造函数选项
- 可选值: onebot, onebot:http, onebot:ws, onebot:ws-reverse

下面的配置项来自 koishi-adapter-cqhttp。你需要将你的 [`type`](#options-type) 字段配置为 `cqhttp`, `cqhttp:http`, `cqhttp:ws``cqhttp:ws-reverse` 中的一种。如果缺省或使用了 `cqhttp`,Koishi 会读取你的 `server` 选项,根据你配置的服务器 URL 进行适配。
如果使用了 `onebot`,Koishi 会读取你的 `server` 选项,根据你配置的服务器 URL 进行适配。

相关 OneBot 配置:`use_http`, `use_ws`

### options.path

- 类型:`string`

服务器监听的路径。相关 OneBot 配置:`post_url`

### options.secret

- 类型:`string`

接收信息时用于验证的字段,应与 OneBot 的 `secret` 配置保持一致。

### options(.bots[]).server

- 类型:`string`
Expand All @@ -107,23 +83,30 @@ metaEvent 系列事件对应这 CQHTTP 插件本身的元事件,**只会在 Ap

发送信息时用于验证的字段,应与 OneBot 的 `access_token` 配置保持一致。

### options.retryTimes
## 适配器选项

- 类型:`number`
包括全部的 [`WsClient`](../adapter.md#类-adapter-wsclient) 选项和下列额外选项:

### options.onebot.path

WebSocket 允许重新连接的次数。默认值为 `0`
- 类型:`string`
- 默认值:`'/onebot'`

### options.retryInterval
服务器监听的路径。仅用于 HTTP 通信方式。

- 类型:`number`
相关 OneBot 配置:`post_url`

WebSocket 重新尝试连接前的等待时间,单位为毫秒。默认值为 `5000`
### options.onebot.secret

- 类型:`string`

接收信息时用于验证的字段,应与 OneBot 的 `secret` 配置保持一致。

### options.quickOperation
### options.onebot.quickOperation

- 类型:`number`

快捷操作的时间限制,单位为毫秒。如果配置了这个选项且使用了 HTTP 通信方式,则在这段时间内的首次调用 `meta.send()` 或类似的方法将不产生新的 HTTP 请求。默认值为 `100`。参见 [**快捷操作**](../guide/message.md#快捷操作) 一节。
快捷操作的时间限制,单位为毫秒。如果配置了这个选项且使用了 HTTP 通信方式,则在这段时间内的首次调用 `session.send()` 或类似的方法将不产生新的 HTTP 请求。默认值为 `100`。参见 [**快捷操作**](#快捷操作) 一节。

## 发送消息

Expand Down
28 changes: 28 additions & 0 deletions docs/api/adapter/telegram.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,31 @@ sidebarDepth: 2
5. 创建完毕后,你会获得一个 token(请注意不要泄露),将其作为机器人配置项即可使用

参考文档:[https://core.telegram.org/bots](https://core.telegram.org/bots)

## 适配器选项

### options.telegram.path

- 类型:`string`
- 默认值:`'/telegram'`

服务器监听的路径。

### options.telegram.selfUrl

- 类型:`string`

Koishi 服务暴露在公网的地址,会覆盖 [`options.selfUrl`](../app.md#options-selfurl) 的值。

### options.telegram.endpoint

- 类型: `string`
- 默认值: `'https://api.telegram.org'`

要请求的 API 网址。

### options.telegram.axiosConfig

- 类型: [`AxiosRequestConfig`](https://github.com/axios/axios#request-config)

用于 telegram 适配器的请求配置。

0 comments on commit 16991ec

Please sign in to comment.