Skip to content

Commit

Permalink
adapter guide index
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed Aug 8, 2023
1 parent 400ae0e commit 1910be4
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 38 deletions.
2 changes: 1 addition & 1 deletion .vitepress/config/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@
"link": "/manual/usage/command.md"
},
{
"text": "跨平台",
"text": "账号系统",
"link": "/manual/usage/platform.md"
},
{
Expand Down
6 changes: 3 additions & 3 deletions zh-CN/api/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

频道是消息的集合。一个频道包含了具备时间、逻辑顺序的一系列消息。频道又分为私聊频道和群聊频道,其中私聊频道有且仅有两人参与,而群聊频道可以有任意多人参与。

- [入门 > 跨平台](../manual/usage/platform.html#基础概念)
- [开发 > 跨平台 > 基础知识](../guide/adapter/index.html#核心概念)

## 指令 (Command)

Expand Down Expand Up @@ -77,7 +77,7 @@

群组是平台用户的集合。一个群组通常会同时包含一组[用户](#用户)[频道](#频道),并通过权限机制让其中的部分用户进行管理。在部分平台中,群组和群聊频道的概念恰好是重合的 (例如 Telegram):一个群组内有且仅有一个群聊频道。私聊频道不属于任何群组。

- [入门 > 跨平台](../manual/usage/platform.html#基础概念)
- [开发 > 跨平台 > 基础知识](../guide/adapter/index.html#核心概念)

## 生命周期 (Lifecycle)

Expand All @@ -98,7 +98,7 @@

平台是指聊天平台,比如 QQ、Discord 等。同一平台内的用户间具有相互发送消息的能力,而不同平台的用户间则没有。对于 Rocket.Chat 这一类可自建的聊天平台而言,每个独立的自建服务器都视为不同的平台。

- [入门 > 跨平台](../manual/usage/platform.html#基础概念)
- [开发 > 跨平台 > 基础知识](../guide/adapter/index.html#核心概念)

## 插件 (Plugin)

Expand Down
32 changes: 22 additions & 10 deletions zh-CN/guide/adapter/index.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
# 基本示例

::: tip
在学习本章之前,建议先完整阅读 [入门 > 跨平台](../../manual/usage/platform.md)
:::
# 基础知识

Koishi 通过适配器插件来实现对不同聊天平台的支持。

一方面,适配器插件需要接收来自聊天平台的消息,并将其转换为 Koishi 的标准格式并触发会话事件;另一方面,对于来自 Koishi 内部的请求,适配器也需要将其转换为聊天平台的格式并发送出去。我们可以简单地将这两个过程概括成「接收」和「发送」。

在 Koishi 中,尽管适配器要处理的逻辑随着平台的不同而变化,但本质上所有适配器的结构都是类似的:通过实现 `Bot` 类完成发送的功能,而通过实现 `Adapter` 类完成接收的功能。让我们先来看一个最简单的例子。
在 Koishi 中,尽管适配器要处理的逻辑随着平台的不同而变化,但本质上所有适配器的结构都是类似的:通过实现 `Bot` 类完成发送的功能,而通过实现 `Adapter` 类完成接收的功能。我们先介绍一些与跨平台相关的核心概念,随后将给出一个最简单的适配器插件示例。

## 核心概念

在我们开始之前,先来了解一些与跨平台相关的核心概念。

**平台 (Platform)** 是指聊天平台,比如 Discord、Telegram 等。同一平台内的用户间具有相互发送消息的能力,而不同平台的用户间则没有。对于 Rocket Chat 这一类可自建的聊天平台而言,每个独立的自建服务器都视为不同的平台。

**机器人 (Bot)** 是指由 Koishi 操控的平台用户。这里的用户可以是真实用户,也可以是部分平台专门提供的机器人用户。其他用户通过与机器人进行交互来体验 Koishi 的各项功能。

**适配器 (Adapter)** 是指实现了平台协议,能够让机器人接入平台的插件。通常来说一个适配器实例对应了一个机器人用户,同时启用多个适配器就实现了多个机器人的同时接入。

**消息 (Message)** 是字面意义上的消息。通常是文本或富文本格式的,有时也会包含图片、语音等媒体资源。在 Koishi 中,消息通过消息元素进行统一编码。

**频道 (Channel)** 是消息的集合。一个频道包含了具备时间、逻辑顺序的一系列消息。频道又分为私聊频道和群聊频道,其中私聊频道有且仅有两人参与,而群聊频道可以有任意多人参与。

**群组 (Guild)** 是平台用户的集合。一个群组通常会同时包含一组用户和频道,并通过权限机制让其中的部分用户进行管理。在部分平台中,群组和群聊频道的概念恰好是重合的 (例如 QQ):一个群组内有且仅有一个群聊频道。私聊频道不属于任何群组。

## REPL 适配器

Expand Down Expand Up @@ -79,12 +91,12 @@ export default class ReplAdapter extends Adapter.Server<ReplBot> {
}
```

真实的聊天平台当然会比命令行交互复杂得多,但你仍然可以使用相同的结构来实现它们。在接下来的几节中,我们会进一步介绍适配器插件的更多设计细节。让我们开始吧。

## 适配器也是插件
真实的聊天平台当然会比命令行交互复杂得多,但你仍然可以使用相同的结构来实现它们。在接下来的几节中,我们会进一步介绍适配器插件的更多设计细节。

::: tip
等下,上面的代码的确实现了一个适配器,但它是一个插件吗?

答案是肯定的。这个插件的入口文件是 `index.ts`,默认导出了 `ReplBot`。而 `ReplBot` 的构造函数接受两个参数 `ctx``config`,这与插件的 [类形式](../plugin/index.md) 是一致的。这意味着,一个 `ReplBot` 类本身就是一个可以安装的插件!
答案是肯定的。这个插件的入口文件默认导出了 `ReplBot`。而 `ReplBot` 的构造函数接受两个参数 `ctx``config`,这与插件的 [类形式](../plugin/index.md) 是一致的。这意味着,一个 `ReplBot` 类本身就是一个可以安装的插件!

与此同时,`Bot` 基类中也声明了它是一个 [可重用](../plugin/lifecycle.md#可重用插件) 的插件,因此多次加载此插件将会创建多个独立的 `ReplBot` 实例。适配器插件是最常见的可重用插件。
:::
2 changes: 1 addition & 1 deletion zh-CN/manual/usage/filter.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
大部分插件都提供了过滤器设置,就位于插件详情页的顶部。点击「添加条件」按钮可以创建一个过滤条件。可以通过设置过滤条件来包含或排除任意平台 / 用户 / 群组 / 频道 / 机器人。

::: tip
如果不知道这些 ID 是什么,可以使用 [获取会话信息](./platform.md#获取会话信息) 中介绍的 [inspect](../../plugins/common/inspect.md) 插件。
如果不知道这些 ID 是什么,可以使用 [获取账号信息](./platform.md#获取账号信息) 中介绍的 [inspect](../../plugins/common/inspect.md) 插件。
:::

添加一个条件后,你会发现下方的按钮变成了「添加『与』条件」和「添加『或』条件」两个。Koishi 的过滤器支持二级结构,内层的一系列条件以「与」的逻辑关系组成条件组,外层的一系列条件组以「或」的逻辑关系组成最终的过滤条件。
Expand Down
30 changes: 9 additions & 21 deletions zh-CN/manual/usage/platform.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,18 @@
# 跨平台
# 账号系统

Koishi 说自己是一个「跨平台」的框架,但是这个「跨平台」是指什么呢?这并不单单是指 Koishi 支持多个运行平台,而是指 Koishi 能够同时接入多个聊天平台,并提供最原生的体验:

- Koishi 提供了统一的接口,你可以在任何聊天平台上享受完整的 Koishi 生态
- Koishi 应用可以同时接入多个聊天平台,用户可以在任意平台上与你的机器人进行交互
- Koishi 原生地支持了跨平台账号绑定,这使得用户可以带着全部数据进行无感迁移
- Koishi 提供了统一的接口,你可以在任何聊天平台上享受完整的 Koishi 生态
- Koishi 应用可以同时接入多个聊天平台,用户可以在任意平台上与你的机器人进行交互
- Koishi 原生地支持了跨平台账号绑定,这使得用户可以带着全部数据进行无感迁移

现在就让我们来说说这件事
现在就让我们来说说,如何在 Koishi 中使用跨平台的账号系统

## 基础概念
## 获取账号信息

**平台 (Platform)** 是指聊天平台,比如 Discord、Telegram 等。同一平台内的用户间具有相互发送消息的能力,而不同平台的用户间则没有。对于 Rocket Chat 这一类可自建的聊天平台而言,每个独立的自建服务器都视为不同的平台
有些平台的账号信息是不可见的,所以我们需要借助一些工具来获取它们

**机器人 (Bot)** 是指由 Koishi 操控的平台用户。这里的用户不一定是真实用户,也可以是部分平台专门提供的机器人用户。其他用户通过与机器人进行交互来体验 Koishi 的各项功能。

**适配器 (Adapter)** 是指实现了平台协议,能够让机器人接入平台的插件。通常来说一个适配器实例对应了一个机器人用户,同时启用多个适配器就实现了多个机器人的同时接入。

**消息 (Message)** 是字面意义上的消息。通常是文本或富文本格式的,有时也会包含图片、语音等媒体资源。在 Koishi 中,消息通过消息元素进行统一编码。

**频道 (Channel)** 是消息的集合。一个频道包含了具备时间、逻辑顺序的一系列消息。频道又分为私聊频道和群聊频道,其中私聊频道有且仅有两人参与,而群聊频道可以有任意多人参与。

**群组 (Guild)** 是平台用户的集合。一个群组通常会同时包含一组用户和频道,并通过权限机制让其中的部分用户进行管理。在部分平台中,群组和群聊频道的概念恰好是重合的 (例如 QQ):一个群组内有且仅有一个群聊频道。私聊频道不属于任何群组。

### 获取会话信息

对于一个来自聊天平台的会话,Koishi 会通过平台、消息、频道、用户、机器人的 ID 来进行识别。如果不知道这些值是什么,可以启用 [inspect](../../plugins/common/inspect.md) 插件。使用要绑定的平台账号向机器人发送 `inspect` (这里不要使用沙盒,不然只能获得沙盒用户的数据),就可以获得会话信息:
[inspect](../../plugins/common/inspect.md) 插件提供了获取会话信息的能力。安装这个插件后,使用任意平台账号向机器人发送 `inspect` (这里不要使用沙盒,不然只能获得沙盒用户的数据),就可以获得下面的会话信息:

<chat-panel>
<chat-message nickname="Alice">inspect</chat-message>
Expand All @@ -38,7 +26,7 @@ Koishi 说自己是一个「跨平台」的框架,但是这个「跨平台」
</chat-message>
</chat-panel>

如果你要做账号绑定,这里的「平台名」和「用户 ID」会很有用。
如果你要进行登录或者绑定,这里的「平台名」和「用户 ID」会很有用。

## 控制台登录

Expand Down
2 changes: 1 addition & 1 deletion zh-CN/plugins/common/bind.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
:::

::: tip
建议配合阅读 [入门 > 跨平台 > 账号绑定](../../manual/usage/platform.md#通过指令绑定) 章节。
建议配合阅读 [入门 > 账号系统 > 账号绑定](../../manual/usage/platform.md#通过指令绑定) 章节。
:::

@koishijs/plugin-bind 提供了一个指令,允许用户进行账号绑定。
Expand Down
2 changes: 1 addition & 1 deletion zh-CN/plugins/common/inspect.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# 会话信息 (Inspect)

::: tip
使用方法请参见 [入门 > 跨平台 > 获取会话信息](../../manual/usage/platform.md#获取会话信息) 章节。
使用方法请参见 [入门 > 账号系统 > 获取账号信息](../../manual/usage/platform.md#获取账号信息) 章节。
:::

0 comments on commit 1910be4

Please sign in to comment.