# Discord 机器人

> 在私信里和角色一对一聊天，或者把角色放进服务器，并决定谁能和它们聊、谁来付费。

Source: https://reverie.im/zh/docs/integrations/discord-bot
Language: zh

Reverie 机器人把角色带到 Discord 的两个地方：你和机器人的**私信**，用来一对一聊天；以及**服务器频道**，每个角色都用自己的名字和头像说话。和角色聊天的每个人都需要一个关联了自己 Discord 账号的 Reverie 账号——免费账号就够了——每条回复都按积分记在某个 Reverie 账号上。

## 关联你的账号 \[#link-your-account]

一个 Discord 账号只能对应一个 Reverie 账号。下面任何一种方式都能把它们连起来：

* **从集成面板。** 在应用里进入 **Labs → Discord 与 Telegram 机器人**，在 Discord 卡片上按 **通过 Discord 关联**。你在 Discord 上确认后会直接回来。
* **用 Discord 登录。** 用 Discord 登录 Reverie 时，机器人也会一并关联——除非你曾在面板上取消过关联，那样它会保持未关联，直到你自己再关联一次。
* **在 Discord 里。** 在服务器里或在和机器人的私信里运行 `/link-account`。回复只有你能看到：一个 **关联我的账号** 按钮，只能用一次，**10 分钟**后失效。打开它、登录，两个账号就连上了。

## 在私信里一对一聊天 \[#chat-one-on-one-in-your-dms]

直接给机器人发私信，或者在任何有这个机器人的服务器里运行 `/chat`——对话会转到你的私信里，只有你能看到。单独的 `/chat` 会给出可选的角色；加上名字就能搜索。

* **一次一个角色。** `/chat` 换成别人，`/chats` 列出你在私信里聊过的角色。每个角色都保留自己的对话，所以换回来时能接着上次聊。
* **每条消息都会得到回复**，由机器人发出，回复上方用小字标出角色的名字。图片、语音消息和记忆都和在频道里一样能用。
* **自己的消息自己付费。** 服务器的付费模式和上限在这里不适用。
* **18+ 角色** 跟随你账号的 18+ 设置：设置关着时，它们会被隐藏，也不能在私信里聊天。
* `/remove-character` 结束当前对话——它会保存下来，可以从 `/chats` 找回——`/reset-chat` 在请你确认后清空它。
* `/settings` 的子命令里，只有 `model`、`language` 和 `chat-style` 对私信生效。

如果机器人说它没法给你发消息，请在 Discord 的隐私设置里允许来自服务器成员的私信，然后再试一次。你最近的私信对话也会出现在集成面板的 **私聊** 下，点 **在网页上继续** 就能在浏览器里接着聊。

## 把机器人加进服务器 \[#add-the-bot-to-a-server]

### 邀请机器人 \[#invite-the-bot]

在集成面板的 Discord 卡片上按 **添加机器人到服务器**，然后挑一个服务器。请求的权限全都别取消勾选——下面的表格说明了每一项为什么需要。机器人加入后，会在服务器发送加入消息的地方发一条简短的入门说明。

### 把角色加进频道 \[#add-a-character-to-a-channel]

在一个文字频道里运行 `/add-character`，从自动补全里挑一个角色——公开角色和你自己的私密角色都在里面。你需要 **Manage Channels**（管理频道）权限和一个已关联的账号。机器人会创建一个 webhook，好让角色能以自己的名义发言，然后发一句问候。

### 定好规则 \[#set-the-rules]

可选。`/settings` 决定频道里的角色怎么回复、由谁付费；`/server` 决定到底谁能和它们聊天。两者下面都有介绍。

## 邀请时请求的权限 \[#permissions-the-invite-requests]

| 权限                  | 为什么需要                         |
| ------------------- | ----------------------------- |
| **View Channels**   | 读取机器人被使用的那个频道                 |
| **Send Messages**   | 发出回复和命令的输出                    |
| **Manage Messages** | 当引发某条回复的消息被删除时，把角色的回复也撤掉      |
| **Embed Links**     | 命令输出和社区抽奖公告都是嵌入内容             |
| **Manage Roles**    | 在 Reverie 自己的服务器里发放社区抽奖用到的身份组 |
| **Manage Webhooks** | **必需。** 角色是通过各自的 webhook 说话的  |

没有 **Manage Webhooks**，`/add-character` 会失败，角色也加不进来。

## 命令 \[#commands]

在服务器里，标着 **Manage Channels** 或 **Manage Server** 的命令只对拥有该 Discord 权限的成员显示。账号类和管理类命令的回复只有你能看到。

| 命令                   | 选项          | 在哪里                      | 作用                                                                                     |
| -------------------- | ----------- | ------------------------ | -------------------------------------------------------------------------------------- |
| `/help`              | —           | 服务器、私信                   | 私下列出所有命令                                                                               |
| `/link-account`      | —           | 服务器、私信                   | 发一个一次性链接，用来连接你的 Discord 和 Reverie 账号                                                   |
| `/chat`              | `name`（可选）  | 服务器、私信                   | 在私信里选择或切换角色。在服务器里用时，会把选项发到你的私信                                                         |
| `/chats`             | —           | 服务器、私信                   | 你在私信里聊过的角色，可以在它们之间切换                                                                   |
| `/add-character`     | `name`（必填）  | 服务器 · Manage Channels    | 把一个角色加进本频道并打招呼                                                                         |
| `/remove-character`  | `name`（必填）  | 服务器 · Manage Channels、私信 | 移除该角色并删掉它的 webhook。在私信里则结束当前对话                                                         |
| `/list-characters`   | —           | 服务器                      | 列出本频道的角色，每个都带一个移除按钮                                                                    |
| `/character-info`    | `name`（必填）  | 服务器、私信                   | 简介、图片、年龄、性别、评分、分类、标签和 NSFW 标记，并附角色页面的链接。关联账号后，只要你已经收到它的几条回复、且它的评价区开着，还会提供 1–5★ 按钮给角色评分 |
| `/reset-chat`        | —           | 服务器 · Manage Channels、私信 | 删除本频道的消息和摘要，并报告删掉了多少。在私信里则在你确认后清空当前对话                                                  |
| `/regenerate-reply`  | `model`（可选） | 服务器、私信                   | 重掷角色的上一条回复，也可以只在这一次换个模型                                                                |
| `/reply-suggestions` | —           | 服务器、私信                   | 三条建议回复，做成按钮；点一条就以你的名义发出去                                                               |
| `/settings`          | 一个子命令（必填）   | 服务器、私信                   | 频道设置和个人设置                                                                              |
| `/plugins`           | 一个子命令（必填）   | 服务器、私信                   | 显示这里正在运行的插件；安装、移除或开关官方插件和你自己的插件                                                        |
| `/server`            | —           | 服务器 · Manage Server 或付费方 | 谁能和角色聊天、每位成员的每日上限、被屏蔽的成员，以及用量                                                          |
| `/my-account`        | —           | 服务器、私信                   | 积分、套餐用量、续费日期、聊天数                                                                       |
| `/daily`             | —           | 服务器、私信                   | 领取每日签到                                                                                 |
| `/notify`            | —           | 服务器、私信                   | 角色能否主动找你，以及哪些通知会发到你的私信                                                                 |

`/plugins` 接受 `list`、`install`、`remove`、`enable` 或 `disable`。只提供官方插件和你自己的插件，且只限提示词插件和工具插件；需要填写设置的插件无法从机器人安装。工具插件的结果会以角色的名义作为一张简短卡片发出来。在频道里，更改插件需要 **Manage Channels** 权限，或是你曾把角色添加到该频道，任何人都可以查看列表；在你的私信里，插件由你自己决定。

单独的 `/settings` 不是一条有效命令——它总要带六个子命令中的一个：

| 子命令                      | 选项                        | 需要              | 效果                                         |
| ------------------------ | ------------------------- | --------------- | ------------------------------------------ |
| `/settings model`        | `model`（可选）               | —               | **你**在本频道主角色上使用的模型。留空则显示当前的或重置它。高级模型可能需要订阅 |
| `/settings language`     | `language`（可选）            | Manage Channels | 本频道的回复语言。留空则重置为英语                          |
| `/settings channel-mode` | `mode`：`auto` 或 `mention` | Manage Channels | 角色是回复每一条消息，还是只在被点到时回复                      |
| `/settings chat-style`   | `style`：`RP` 或 `NORMAL`   | Manage Channels | 带动作描写的角色扮演文风，还是只有对白                        |
| `/settings payment-mode` | `mode`：`owner` 或 `user`   | Manage Channels | 由谁付费                                       |
| `/settings daily-limit`  | `credits`（必填，≥ 0）         | Manage Channels | 每个 UTC 日的积分上限。`0` 表示不限                     |

同样这些设置在网页面板上也有，按频道分开，名字是 **Payment mode**、**Daily credit limit**、**Chat style**、**Reply mode**、**Response language** 和 **Your model**。在有人往频道里发过消息之前，语言和模型这两项在那里是禁用的。

## 角色什么时候会回复 \[#when-a-character-replies]

角色会在被 **@提及**、有人**回复**它的某条消息，或者频道处于自动回复时作答。自动回复**默认是关闭的**，所以刚加进来的角色在被点到之前一直安静。

当一个频道里有好几个角色时，这个频道的行为就像一个群聊：一次提示里列出在场的每个角色，由模型决定谁开口。提到某个名字只是随你的消息一起传过去的一个提示，而不是强制那个角色作答的开关。[群聊 →](https://reverie.im/zh/docs/chatting/group-chats)

## 子区 \[#threads]

文字频道里的子区会和该频道的角色对话，并沿用频道的付费模式、回复模式和聊天风格，但有一份自己的历史——适合开一段支线剧情，又不会把频道弄乱。它一开始使用频道的回复语言；在子区里使用 `/settings language` 和 `/settings model`，只对这个子区生效。子区的花费计入频道的每日上限。改变角色阵容或频道其他设置的命令，比如 `/add-character`、`/list-characters`、`/plugins` 或 `/settings chat-style`，会提示你到父频道去操作。论坛帖子和其他类型的子区没有角色。

## 谁来付费 \[#who-pays]

| 付费模式               | 记在谁头上                                     | 适用的上限                               |
| ------------------ | ----------------------------------------- | ----------------------------------- |
| **Owner pays**（默认） | 服务器的付费方：第一个把角色加进这个服务器的 Reverie 账号，直到有别人接手 | 频道的每日积分上限，以及用 `/server` 设置的每位成员每日上限 |
| **User pays**      | 每个发送者自己的余额                                | 没有——每个成员受自己余额的约束                    |

消息的花费和网页应用里一样：按 token 计算，再乘以模型的积分倍率。每日计数在 **00:00 UTC** 重置，面板上的频道设置对话框会显示今天的用量和上限。

想把账单转到自己的账号上——比如当初设置机器人的人已经离开——打开 `/server`，按 **用我的账号付费**。它会作用于这个服务器里所有由付费方付费的频道。

## 服务器规则 \[#server-rules]

`/server` 会打开一个只有你能看到的面板。拥有 **Manage Server** 权限的成员可以打开它，为服务器角色付费的人也可以。面板显示今天和过去七天的用量、今天用得最多的成员，以及三条规则：

| 规则           | 选项                                                  |
| ------------ | --------------------------------------------------- |
| **谁能和角色聊天**  | **所有人**（默认）、**仅管理员**，或 **拥有特定身份组的成员**——在第二个菜单里挑选身份组 |
| **每位成员每日上限** | 每位成员每个 UTC 日最多能花掉多少付费方的积分，或 **不设上限**（默认）。只在付费方付费时生效 |
| **已屏蔽的成员**   | 在这里选中的成员在整个服务器里都无法和角色聊天                             |

这里的管理员指拥有 **Manage Server** 权限的成员。管理员和付费账号永远不会被挡在外面，不论是屏蔽还是访问模式；在挑选任何身份组之前，**拥有特定身份组的成员** 只让他们开口。被访问模式排除的成员会收到一次提示，说只有部分成员能和角色聊天；被屏蔽的成员则完全得不到回复。

## 年龄限制角色 \[#age-restricted-characters]

18+ 角色只在年龄限制频道、年龄限制分类下的频道，或者整个设为 18+ 的服务器里回复——子区跟随它所在的频道。在别的地方，机器人会说明原因，而不是回复。在你的私信里，18+ 角色则跟随你账号的 18+ 设置。

## 频道里能用什么 \[#what-works-in-a-channel]

* **图片。** 角色可以在 Discord 里生成图片。
* **语音输出。** 角色可以发语音消息。
* **语音输入。** 你发的语音消息会被转成文字，最大 **25 MB**。
* **记忆。** 当模型支持工具时，角色会保存、更新和删除记忆，世界书里的设定也会带进它的上下文。
* **历史。** 频道变长时会自动生成摘要。
* 往频道里加第二个角色时，会沿用该频道的聊天风格、付费模式和每日上限。

## 通知和签到 \[#notifications-and-check-ins]

`/notify` 管两件事。**角色主动找你** 是你账号的主动程度，和网站上是同一个设置：有订阅时，你在私信里正在聊的角色可以主动给你写消息——见[主动消息](https://reverie.im/zh/docs/chatting/proactive-messages)。**同时发到这里** 决定你的哪些 Reverie 通知也会发到你的私信；一开始只打开了 **账号与账单**——见[通知](https://reverie.im/zh/docs/account/notifications)。集成面板上也有同样的选项。

`/daily` 领取你的[每日签到](https://reverie.im/zh/docs/rewards/daily-check-in)，和网站上是同一个，并附上抽奖的链接。

## 编辑和删除消息 \[#editing-and-deleting-messages]

编辑你最近的那条消息，会重新生成对它的回复。

> 在 Discord 里删除一条消息，会把那条消息**以及它之后的每一条**都从角色的历史里删掉，连同那之后产生的记忆和附件。角色的回复也会从频道里消失。这个操作无法撤销。

## 机器人会读到什么 \[#what-the-bot-reads]

机器人会收到它能看到的频道里的每一条消息——提及和回复就是这样到达它那里的。在每次回复之前，它还会读这个频道**过去一小时内的近期消息**，包括那些不是对它说的，并把它们作为上下文交给模型，好让角色跟得上场上的气氛。

有机器人在的频道，就当成一个机器人正在听的频道。如果这不是你想要的，就把角色放进一个专门的频道。

## 限制 \[#limits]

| 限制                       | 数值                |
| ------------------------ | ----------------- |
| 每个频道的角色数                 | 5                 |
| Discord 消息长度             | 2,000 个字符         |
| 语音消息大小                   | 25 MB             |
| 每个 Discord 频道的 webhook 数 | 15（Discord 自己的上限） |
| 每个频道排队的消息数               | 3                 |

同一个人连着快速发出的消息会被合并成一轮。

## 解除关联 \[#unlinking]

在集成面板上用 **取消关联** 解除关联。把机器人踢出服务器或者自己退出服务器，都不会解除账号关联。解除之后，用 Discord 登录不会再自动关联机器人——想重新关联时，用 **通过 Discord 关联** 或 `/link-account`。

## 相关 \[#related]

* [Telegram 机器人](https://reverie.im/zh/docs/integrations/telegram-bot) — 同样的角色，在 Telegram 里
* [Reverie 实验室](https://reverie.im/zh/docs/integrations/labs) — 集成面板在哪儿
* [群聊](https://reverie.im/zh/docs/chatting/group-chats) — 多角色对话是怎么运转的
* [积分](https://reverie.im/zh/docs/billing/credits) — 一条消息要花多少
