# Бот для Discord

> Общайтесь с персонажами один на один в личных сообщениях или добавьте их на сервер и решите, кто может с ними говорить и кто платит.

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

Бот Reverie приводит персонажей в два места Discord: в ваши **личные сообщения** с ботом — для разговоров один на один — и в **каналы серверов**, где каждый персонаж говорит под своим именем и аватаром. Каждому, кто разговаривает с персонажем, нужен аккаунт Reverie, привязанный к его аккаунту Discord (хватит и бесплатного), а каждый ответ списывается кредитами с какого-то аккаунта Reverie.

## Привязка аккаунта \[#link-your-account]

Один аккаунт Discord соответствует ровно одному аккаунту Reverie. Связать их можно любым из способов:

* **Через панель интеграций.** В приложении откройте **Labs → Боты для Discord и Telegram** и нажмите **Привязать через Discord** на карточке Discord. Вы подтверждаете в Discord и сразу возвращаетесь.
* **Входом через Discord.** Вход в Reverie через Discord заодно привязывает и бота — если только вы не отвязали его в панели: тогда он остаётся отвязанным, пока вы сами не привяжете его снова.
* **Из 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** и привязанный аккаунт. Бот создаёт вебхук, чтобы персонаж мог писать под своим именем, и отправляет приветствие.

### Задайте правила \[#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, ЛС               | Убирает персонажа и удаляет его вебхук. В личных сообщениях завершает текущий разговор                                                                                                                                                           |
| `/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/ru/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**                 | Баланс самого отправителя                                                                                                 | Никакие — каждого участника ограничивает его собственный баланс                  |

Сообщения стоят столько же, сколько в веб-приложении: по токенам, умноженным на кредитный множитель модели. Дневные счётчики обнуляются в **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 МБ**.
* **Память.** Когда модель поддерживает инструменты, персонажи сохраняют, обновляют и удаляют воспоминания, а канон из книг мира попадает в их контекст.
* **История.** Длинные каналы автоматически сворачиваются в сводки по мере роста.
* Второй персонаж, добавленный в канал, перенимает стиль чата, режим оплаты и дневной лимит этого канала.

## Уведомления и ежедневная награда \[#notifications-and-check-ins]

`/notify` настраивает две вещи. **Персонажи пишут первыми** — это уровень проактивности вашего аккаунта, та же настройка, что на сайте: с подпиской персонаж, с которым вы сейчас говорите в личных сообщениях, может написать вам первым — см. [Сообщения по инициативе персонажа](https://reverie.im/ru/docs/chatting/proactive-messages). **Также присылать сюда** выбирает, какие из ваших уведомлений Reverie будут приходить ещё и в личные сообщения; сначала включено только **Аккаунт и оплата** — см. [Уведомления](https://reverie.im/ru/docs/account/notifications). В панели интеграций есть те же варианты.

`/daily` забирает вашу [ежедневную награду](https://reverie.im/ru/docs/rewards/daily-check-in) — ту же, что на сайте, — и даёт ссылку на розыгрыш.

## Правка и удаление сообщений \[#editing-and-deleting-messages]

Если отредактировать своё последнее сообщение, ответ на него будет создан заново.

> Удаление сообщения в Discord убирает это сообщение **и все сообщения после него** из истории персонажа вместе с воспоминаниями и вложениями, созданными после этого момента. Ответы персонажа тоже исчезают из канала. Отменить это нельзя.

## Что читает бот \[#what-the-bot-reads]

Бот получает каждое сообщение в каналах, которые ему видны, — именно так до него доходят упоминания и ответы. Перед каждым ответом он также читает **недавние сообщения канала за последний час**, включая те, что обращены не к нему, и передаёт их модели как контекст, чтобы персонаж понимал, о чём речь.

Считайте канал с ботом каналом, который бот слушает. Если это не то, чего вы хотите, отведите персонажам отдельный канал.

## Ограничения \[#limits]

| Ограничение                  | Значение                        |
| ---------------------------- | ------------------------------- |
| Персонажей на канал          | 5                               |
| Длина сообщения в Discord    | 2 000 символов                  |
| Размер голосового сообщения  | 25 МБ                           |
| Webhook'ов на канал Discord  | 15 (ограничение самого Discord) |
| Сообщений в очереди на канал | 3                               |

Быстрые сообщения подряд от одного человека объединяются в один ход.

## Отвязка \[#unlinking]

Отвяжите аккаунт в панели интеграций кнопкой **Отвязать аккаунт**. Если убрать бота с сервера или выйти с сервера, аккаунт не отвяжется. После отвязки вход через Discord больше не привязывает бота сам — когда захотите вернуть его, используйте **Привязать через Discord** или `/link-account`.

## Смежное \[#related]

* [Бот для Telegram](https://reverie.im/ru/docs/integrations/telegram-bot) — те же персонажи, но в Telegram
* [Reverie Лаборатория](https://reverie.im/ru/docs/integrations/labs) — где находится панель интеграций
* [Групповые чаты](https://reverie.im/ru/docs/chatting/group-chats) — как устроены разговоры с несколькими персонажами
* [Кредиты](https://reverie.im/ru/docs/billing/credits) — сколько стоит сообщение
