diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md
index 0a52abe26..8f7729754 100644
--- a/docs/uk/channels/discord.md
+++ b/docs/uk/channels/discord.md
@@ -4,46 +4,46 @@ read_when:
summary: Стан підтримки бота Discord, можливості та конфігурація
title: Discord
x-i18n:
- generated_at: "2026-04-28T18:43:59Z"
+ generated_at: "2026-04-28T19:12:28Z"
model: gpt-5.5
provider: openai
- source_hash: af9ce1f825f47c5945aaaa1a7ae72e13679d298384bc34d3c7a63003b0206a3e
+ source_hash: b552ae25d1f1edac7499af1ebb0a04b213f546b95aa93cd2bb4e292ce793bc40
source_path: channels/discord.md
workflow: 16
---
-Готово для особистих повідомлень і серверних каналів через офіційний Discord Gateway.
+Готово для приватних повідомлень і каналів гільдії через офіційний Discord Gateway.
- Особисті повідомлення Discord за замовчуванням запускаються в режимі сполучення.
+ Приватні повідомлення Discord за замовчуванням переходять у режим сполучення.
Нативна поведінка команд і каталог команд.
- Діагностика між каналами та процес відновлення.
+ Міжканальна діагностика та процес відновлення.
## Швидке налаштування
-Вам потрібно створити нову програму з ботом, додати бота на свій сервер і сполучити його з OpenClaw. Ми рекомендуємо додати бота на власний приватний сервер. Якщо у вас його ще немає, [спершу створіть його](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**).
+Вам потрібно створити нову програму з ботом, додати бота на свій сервер і сполучити його з OpenClaw. Рекомендуємо додати бота на власний приватний сервер. Якщо у вас його ще немає, [спочатку створіть сервер](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**).
- Перейдіть до [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть її на кшталт "OpenClaw".
+ Перейдіть до [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть її, наприклад, "OpenClaw".
- Натисніть **Bot** на бічній панелі. Установіть **Username** відповідно до назви вашого агента OpenClaw.
+ Натисніть **Bot** на бічній панелі. Установіть **Username** на ім’я, яким ви називаєте свого агента OpenClaw.
- Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і увімкніть:
+ На сторінці **Bot** прокрутіть униз до **Privileged Gateway Intents** і ввімкніть:
- - **Message Content Intent** (обов'язково)
- - **Server Members Intent** (рекомендовано; потрібно для списків дозволених ролей і зіставлення імен з ID)
- - **Presence Intent** (необов'язково; потрібно лише для оновлень присутності)
+ - **Message Content Intent** (обов’язково)
+ - **Server Members Intent** (рекомендовано; обов’язково для списків дозволених ролей і зіставлення імен з ID)
+ - **Presence Intent** (необов’язково; потрібно лише для оновлень присутності)
@@ -51,57 +51,57 @@ x-i18n:
Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**.
- Попри назву, це створює ваш перший токен — нічого не "скидається".
+ Попри назву, це генерує ваш перший токен — нічого не "скидається".
- Скопіюйте токен і збережіть його. Це ваш **Bot Token**, і він скоро знадобиться.
+ Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро знадобиться.
-
+
Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на свій сервер.
- Прокрутіть униз до **OAuth2 URL Generator** і увімкніть:
+ Прокрутіть униз до **OAuth2 URL Generator** і ввімкніть:
- `bot`
- `applications.commands`
- Нижче з'явиться розділ **Bot Permissions**. Увімкніть принаймні:
+ Нижче з’явиться розділ **Bot Permissions**. Увімкніть принаймні:
- **General Permissions**
- - Перегляд каналів
- **Text Permissions**
- - Надсилання повідомлень
- - Читання історії повідомлень
- - Вбудовування посилань
- - Прикріплення файлів
- - Додавання реакцій (необов'язково)
+ **Загальні дозволи**
+ - Переглядати канали
+ **Текстові дозволи**
+ - Надсилати повідомлення
+ - Читати історію повідомлень
+ - Вбудовувати посилання
+ - Прикріплювати файли
+ - Додавати реакції (необов’язково)
- Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в гілках Discord, зокрема у сценаріях форумних або медіаканалів, які створюють або продовжують гілку, також увімкніть **Send Messages in Threads**.
- Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте бачити свого бота на сервері Discord.
+ Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах Discord, зокрема в робочих процесах форумних або медіаканалів, які створюють чи продовжують тред, також увімкніть **Send Messages in Threads**.
+ Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте побачити свого бота на сервері Discord.
-
- У застосунку Discord потрібно увімкнути режим розробника, щоб копіювати внутрішні ID.
+
+ Повернувшись у програму Discord, потрібно ввімкнути Developer Mode, щоб копіювати внутрішні ID.
- 1. Натисніть **User Settings** (піктограма шестерні біля вашого аватара) → **Advanced** → увімкніть **Developer Mode**
- 2. Натисніть правою кнопкою на **піктограмі сервера** на бічній панелі → **Copy Server ID**
- 3. Натисніть правою кнопкою на **власному аватарі** → **Copy User ID**
+ 1. Натисніть **User Settings** (іконка шестерні поруч із вашим аватаром) → **Advanced** → увімкніть **Developer Mode**
+ 2. Клацніть правою кнопкою миші **іконку сервера** на бічній панелі → **Copy Server ID**
+ 3. Клацніть правою кнопкою миші **власний аватар** → **Copy User ID**
- Збережіть **Server ID** і **User ID** поруч із Bot Token — на наступному кроці ви надішлете всі три значення до OpenClaw.
+ Збережіть свої **Server ID** і **User ID** поруч із Bot Token — на наступному кроці ви надішлете всі три до OpenClaw.
-
- Щоб сполучення працювало, Discord має дозволяти боту надсилати вам особисті повідомлення. Натисніть правою кнопкою на **піктограмі сервера** → **Privacy Settings** → увімкніть **Direct Messages**.
+
+ Щоб сполучення працювало, Discord має дозволяти вашому боту надсилати вам приватні повідомлення. Клацніть правою кнопкою миші **іконку сервера** → **Privacy Settings** → увімкніть **Direct Messages**.
- Це дозволяє учасникам сервера (зокрема ботам) надсилати вам особисті повідомлення. Залиште це ввімкненим, якщо хочете використовувати особисті повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише серверні канали, можете вимкнути особисті повідомлення після сполучення.
+ Це дозволяє учасникам сервера (зокрема ботам) надсилати вам приватні повідомлення. Залиште це ввімкненим, якщо хочете використовувати приватні повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути приватні повідомлення після сполучення.
-
- Токен вашого бота Discord є секретом (як пароль). Задайте його на машині, де запущено OpenClaw, перш ніж писати своєму агенту.
+
+ Токен вашого бота Discord є секретом (як пароль). Установіть його на машині, де запущено OpenClaw, перш ніж писати своєму агенту.
```bash
export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN"
@@ -111,21 +111,21 @@ openclaw config set channels.discord.enabled true --strict-json
openclaw gateway
```
- Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через застосунок OpenClaw для Mac або зупинивши й повторно запустивши процес `openclaw gateway run`.
- Для встановлень керованого сервісу запустіть `openclaw gateway install` з оболонки, де наявний `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв'язати env SecretRef після перезапуску.
+ Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через програму OpenClaw для Mac або зупинивши й повторно запустивши процес `openclaw gateway run`.
+ Для керованих інсталяцій сервісу виконайте `openclaw gateway install` з оболонки, де присутній `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв’язати env SecretRef після перезапуску.
-
+
- Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому. Якщо Discord — ваш перший канал, натомість скористайтеся вкладкою CLI / config.
+ Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому. Якщо Discord — ваш перший канал, скористайтеся вкладкою CLI / конфігурація.
- > "Я вже задав токен бота Discord у конфігурації. Заверши налаштування Discord з User ID `` і Server ID ``."
+ > "Я вже встановив токен свого бота Discord у конфігурації. Заверши налаштування Discord з User ID `` і Server ID ``."
- Якщо ви віддаєте перевагу файловій конфігурації, задайте:
+ Якщо ви віддаєте перевагу файловій конфігурації, установіть:
```json5
{
@@ -142,27 +142,27 @@ openclaw gateway
}
```
- Резервний env для облікового запису за замовчуванням:
+ Резервний env-варіант для облікового запису за замовчуванням:
```bash
DISCORD_BOT_TOKEN=...
```
- Підтримуються відкриті значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets).
+ Значення `token` у відкритому тексті підтримуються. Значення SecretRef також підтримуються для `channels.discord.token` через env/file/exec-провайдери. Див. [Керування секретами](/uk/gateway/secrets).
-
- Дочекайтеся запуску gateway, потім напишіть своєму боту в Discord в особисті повідомлення. Він відповість кодом сполучення.
+
+ Дочекайтеся, доки Gateway запуститься, а потім надішліть приватне повідомлення своєму боту в Discord. Він відповість кодом сполучення.
Надішліть код сполучення своєму агенту в наявному каналі:
- > "Підтвердь цей код сполучення Discord: ``"
+ > "Схвали цей код сполучення Discord: ``"
@@ -176,27 +176,28 @@ openclaw pairing approve discord
Коди сполучення спливають через 1 годину.
- Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через особисті повідомлення.
+ Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення.
-Розв'язання токена враховує обліковий запис. Значення токена в конфігурації мають пріоритет над резервним env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням.
-Для розширених вихідних викликів (інструмент повідомлень / дії каналу) явний `token` для окремого виклику використовується саме для цього виклику. Це стосується дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політики облікового запису та параметри повторних спроб усе ще беруться з вибраного облікового запису в активному знімку runtime.
+Розв’язання токена враховує обліковий запис. Значення токена з конфігурації мають пріоритет над резервним env-значенням. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням.
+Якщо два ввімкнені облікові записи Discord розв’язуються до одного й того самого токена бота, OpenClaw запускає лише один монітор Gateway для цього токена. Токен із конфігурації має пріоритет над резервним env-значенням за замовчуванням; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис повідомляється як вимкнений.
+Для розширених вихідних викликів (дії інструмента message/каналу) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій send і read/probe-стилю (наприклад read/search/fetch/thread/pins/permissions). Налаштування політики облікового запису та повторних спроб усе одно беруться з вибраного облікового запису в активному знімку runtime.
-## Рекомендовано: налаштуйте робочий простір сервера
+## Рекомендовано: налаштуйте робочий простір гільдії
-Коли особисті повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власний сеанс агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.
+Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви й ваш бот.
-
- Це дозволяє вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в особистих повідомленнях.
+
+ Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях.
- > "Додай мій Discord Server ID `` до списку дозволених серверів"
+ > "Додай мій Discord Server ID `` до списку дозволених гільдій"
@@ -221,17 +222,17 @@ openclaw pairing approve discord
-
- За замовчуванням ваш агент відповідає в серверних каналах лише коли його @згадують. Для приватного сервера, ймовірно, ви захочете, щоб він відповідав на кожне повідомлення.
+
+ За замовчуванням ваш агент відповідає в каналах гільдії лише коли його згадують через @mention. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення.
- У серверних каналах звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, щоб агент міг за замовчуванням спостерігати й публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
+ У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, тож агент може за замовчуванням спостерігати й публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
- > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути @згаданим"
+ > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути @mentioned"
- Задайте `requireMention: false` у конфігурації сервера:
+ Установіть `requireMention: false` у конфігурації гільдії:
```json5
{
@@ -247,72 +248,72 @@ openclaw pairing approve discord
}
```
- Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат, задайте `messages.groupChat.visibleReplies: "automatic"`.
+ Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат, установіть `messages.groupChat.visibleReplies: "automatic"`.
-
- За замовчуванням довгострокова пам'ять (MEMORY.md) завантажується лише в сеансах особистих повідомлень. Серверні канали не завантажують MEMORY.md автоматично.
+
+ За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях приватних повідомлень. Канали гільдії не завантажують MEMORY.md автоматично.
> "Коли я ставлю запитання в каналах Discord, використовуй memory_search або memory_get, якщо тобі потрібен довгостроковий контекст із MEMORY.md."
- Якщо вам потрібен спільний контекст у кожному каналі, помістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони додаються до кожного сеансу). Тримайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам'яті.
+ Якщо вам потрібен спільний контекст у кожному каналі, помістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони ін’єктуються для кожної сесії). Зберігайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них на вимогу за допомогою інструментів пам’яті.
-Тепер створіть кілька каналів на своєму сервері Discord і починайте спілкування. Ваш агент може бачити назву каналу, і кожен канал отримує власний ізольований сеанс — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що пасує вашому робочому процесу.
+Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкуватися. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що відповідає вашому робочому процесу.
## Модель runtime
- Gateway володіє підключенням Discord.
- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються до Discord.
-- Метадані сервера/каналу Discord додаються до промпта моделі як ненадійний
+- Метадані гільдії/каналу Discord додаються до запиту моделі як недовірений
контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт
- назад, OpenClaw видаляє скопійовані метадані з вихідних відповідей і з
- майбутнього контексту повторного відтворення.
-- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основний сеанс агента (`agent:main:main`).
-- Серверні канали є ізольованими ключами сеансів (`agent::discord:channel:`).
-- Групові особисті повідомлення за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`).
-- Нативні slash-команди виконуються в ізольованих командних сеансах (`agent::discord:slash:`), але водночас несуть `CommandTargetSessionKey` до маршрутизованого сеансу розмови.
-- Доставлення текстових оголошень cron/heartbeat до Discord використовує фінальну
- видиму асистенту відповідь один раз. Медіа та структуровані payload компонентів залишаються
- багатоповідомленнєвими, коли агент випускає кілька payload, придатних до доставлення.
+ назад, OpenClaw прибирає скопійовані метадані з вихідних відповідей і з
+ майбутнього контексту відтворення.
+- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують головну сесію агента (`agent:main:main`).
+- Канали гільдії мають ізольовані ключі сесій (`agent::discord:channel:`).
+- Групові приватні повідомлення за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`).
+- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас усе ще передаючи `CommandTargetSessionKey` до маршрутизованої сесії розмови.
+- Текстова доставка оголошень cron/Heartbeat до Discord використовує фінальну
+ видиму для асистента відповідь один раз. Медіа та payload-и структурованих компонентів залишаються
+ багатоповідомними, коли агент видає кілька payload-ів, придатних для доставки.
## Форумні канали
-Форумні та медіаканали Discord приймають лише дописи в гілках. OpenClaw підтримує два способи їх створення:
+Форумні та медіаканали Discord приймають лише публікації в тредах. OpenClaw підтримує два способи їх створення:
-- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити гілку. Назва гілки використовує перший непорожній рядок вашого повідомлення.
-- Використайте `openclaw message thread create`, щоб створити гілку напряму. Не передавайте `--message-id` для форумних каналів.
+- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити тред. Заголовок треду використовує перший непорожній рядок вашого повідомлення.
+- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для форумних каналів.
-Приклад: надіслати до батьківського форуму, щоб створити гілку
+Приклад: надіслати до батьківського форуму, щоб створити тред
```bash
openclaw message send --channel discord --target channel: \
--message "Topic title\nBody of the post"
```
-Приклад: явно створити форумну гілку
+Приклад: явно створити форумний тред
```bash
openclaw message thread create --channel discord --target channel: \
--thread-name "Topic title" --message "Body of the post"
```
-Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самої гілки (`channel:`).
+Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самого треду (`channel:`).
## Інтерактивні компоненти
-OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень з payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`.
+OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`.
Підтримувані блоки:
@@ -320,21 +321,21 @@ OpenClaw підтримує контейнери компонентів Discord
- Рядки дій дозволяють до 5 кнопок або одне меню вибору
- Типи вибору: `string`, `user`, `role`, `mentionable`, `channel`
-За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити кнопкам, спискам вибору й формам використовуватися кілька разів, доки вони не спливуть.
+За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, вибори та форми багато разів, доки не завершиться строк їх дії.
-Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли налаштовано, користувачі без збігу отримують ефемерну відмову.
+Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли це налаштовано, користувачі, які не збігаються, отримують ефемерну відмову.
-Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з розкривними списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і користуватися нею може лише користувач, який її викликав.
+Слеш-команди `/model` і `/models` відкривають інтерактивний вибірник моделі з випадаючими списками провайдера, моделі та сумісного середовища виконання, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибірника ефемерна, і користуватися нею може лише користувач, який її викликав.
-Вкладення файлів:
+Вкладені файли:
-- блоки `file` мають указувати на посилання на вкладення (`attachment://`)
-- Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів
+- блоки `file` мають вказувати на посилання на вкладення (`attachment://`)
+- Передайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів
- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням на вкладення
Модальні форми:
-- Додайте `components.modal` з до 5 полями
+- Додайте `components.modal` із максимум 5 полями
- Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select`
- OpenClaw автоматично додає кнопку запуску
@@ -392,24 +393,24 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
-## Контроль доступу й маршрутизація
+## Контроль доступу та маршрутизація
-
- `channels.discord.dmPolicy` керує доступом DM (застаріле: `channels.discord.dm.policy`):
+
+ `channels.discord.dmPolicy` керує доступом до DM (застаріле: `channels.discord.dm.policy`):
- `pairing` (за замовчуванням)
- `allowlist`
- - `open` (вимагає, щоб `channels.discord.allowFrom` містив `"*"`; застаріле: `channels.discord.dm.allowFrom`)
+ - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`; застаріле: `channels.discord.dm.allowFrom`)
- `disabled`
- Якщо політика DM не відкрита, невідомі користувачі блокуються (або отримують запит на сполучення в режимі `pairing`).
+ Якщо політика DM не відкрита, невідомі користувачі блокуються (або отримують запит на спарювання в режимі `pairing`).
- Пріоритетність кількох облікових записів:
+ Пріоритет для кількох акаунтів:
- - `channels.discord.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
- - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхній власний `allowFrom` не задано.
- - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`.
+ - `channels.discord.accounts.default.allowFrom` застосовується лише до акаунта `default`.
+ - Іменовані акаунти успадковують `channels.discord.allowFrom`, коли їхній власний `allowFrom` не задано.
+ - Іменовані акаунти не успадковують `channels.discord.accounts.default.allowFrom`.
Формат цілі DM для доставки:
@@ -420,23 +421,23 @@ Slash-команди `/model` і `/models` відкривають інтерак
-
- Обробкою гільдій керує `channels.discord.groupPolicy`:
+
+ Обробкою guild керує `channels.discord.groupPolicy`:
- `open`
- `allowlist`
- `disabled`
- Безпечна базова конфігурація, коли існує `channels.discord`, — це `allowlist`.
+ Безпечний базовий рівень, коли існує `channels.discord`, — `allowlist`.
Поведінка `allowlist`:
- - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug також приймається)
- - необов’язкові списки дозволених відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли збігаються з `users` АБО `roles`
- - прямий збіг імен/тегів вимкнено за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності
+ - guild має збігатися з `channels.discord.guilds` (переважно `id`, slug приймається)
+ - необов’язкові списки дозволених відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволяються, коли збігаються з `users` АБО `roles`
+ - прямий збіг за іменем/тегом вимкнений за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як режим аварійної сумісності
- імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів
- - якщо для гільдії налаштовано `channels`, канали поза списком заборонені
- - якщо гільдія не має блока `channels`, дозволені всі канали в цій гільдії зі списку дозволених
+ - якщо для guild налаштовано `channels`, канали поза списком забороняються
+ - якщо guild не має блока `channels`, усі канали в цьому дозволеному guild дозволені
Приклад:
@@ -462,33 +463,33 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Якщо ви лише задаєте `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, резервна поведінка runtime — `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` має значення `open`.
+ Якщо ви задаєте лише `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, резервне значення під час виконання — `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`.
-
- Повідомлення гільдії за замовчуванням проходять через перевірку згадки.
+
+ Повідомлення guild за замовчуванням обмежуються згадками.
Виявлення згадок охоплює:
- явну згадку бота
- - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервний варіант `messages.groupChat.mentionPatterns`)
+ - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- неявну поведінку відповіді боту в підтримуваних випадках
- `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`).
+ `requireMention` налаштовується для кожного guild/каналу (`channels.discord.guilds...`).
`ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here).
Групові DM:
- за замовчуванням: ігноруються (`dm.groupEnabled=false`)
- - необов’язковий список дозволених через `dm.groupChannels` (ID каналів або slugs)
+ - необов’язковий `allowlist` через `dm.groupChannels` (ID каналів або slug)
### Маршрутизація агентів на основі ролей
-Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише гільдії. Якщо прив’язка також задає інші поля відповідності (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися.
+Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників Discord guild до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише для guild. Якщо прив’язка також задає інші поля збігу (наприклад `peer` + `guildId` + `roles`), мають збігатися всі налаштовані поля.
```json5
{
@@ -512,24 +513,24 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
-## Нативні команди й авторизація команд
+## Нативні команди та авторизація команд
-- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord.
+- `commands.native` за замовчуванням дорівнює `"auto"` і ввімкнено для Discord.
- Перевизначення для окремого каналу: `channels.discord.commands.native`.
- `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord.
- Авторизація нативних команд використовує ті самі списки дозволених і політики Discord, що й звичайна обробка повідомлень.
-- Команди все ще можуть бути видимими в інтерфейсі Discord для користувачів без авторизації; виконання однаково застосовує авторизацію OpenClaw і повертає "not authorized".
+- Команди все ще можуть бути видимі в інтерфейсі Discord для користувачів, які не авторизовані; виконання все одно застосовує авторизацію OpenClaw і повертає "не авторизовано".
-Див. [Slash-команди](/uk/tools/slash-commands) для каталогу команд і поведінки.
+Див. [Слеш-команди](/uk/tools/slash-commands) для каталогу команд і поведінки.
-Налаштування slash-команд за замовчуванням:
+Стандартні налаштування слеш-команд:
- `ephemeral: true`
-## Подробиці функцій
+## Деталі функцій
-
+
Discord підтримує теги відповіді у виводі агента:
- `[[reply_to_current]]`
@@ -542,21 +543,21 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `all`
- `batched`
- Примітка: `off` вимикає неявне потокове зв’язування відповідей. Явні теги `[[reply_to_*]]` усе ще враховуються.
- `first` завжди прикріплює неявне нативне посилання відповіді до першого вихідного повідомлення Discord у ході.
- `batched` прикріплює неявне нативне посилання відповіді Discord лише тоді, коли
- вхідний хід був debounced-пакетом із кількох повідомлень. Це корисно,
- коли ви хочете нативні відповіді переважно для неоднозначних швидких чатів, а не для кожного
+ Примітка: `off` вимикає неявну потоковість відповідей. Явні теги `[[reply_to_*]]` усе ще враховуються.
+ `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord за хід.
+ `batched` додає неявне посилання нативної відповіді Discord лише тоді, коли
+ вхідний хід був дебаунсованим пакетом із кількох повідомлень. Це корисно,
+ коли ви хочете нативні відповіді переважно для неоднозначних активних чатів, а не для кожного
ходу з одним повідомленням.
- ID повідомлень відображаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення.
+ ID повідомлень передаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення.
-
- OpenClaw може транслювати чернеткові відповіді, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` відображається на `partial` у Discord; `streamMode` — застарілий alias і мігрується автоматично.
+
+ OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення та редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` на Discord зіставляється з `partial`; `streamMode` — застарілий псевдонім, який мігрується автоматично.
- За замовчуванням лишається `off`, бо редагування попереднього перегляду Discord швидко впираються в rate limits, коли кілька ботів або gateways спільно використовують обліковий запис.
+ За замовчуванням лишається `off`, бо редагування попереднього перегляду в Discord швидко впираються в ліміти частоти, коли кілька ботів або Gateway спільно використовують один акаунт.
```json5
{
@@ -573,48 +574,48 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- - `partial` редагує одне повідомлення попереднього перегляду в міру надходження tokens.
+ - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів.
- `block` видає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`).
- - Медіа, помилки й фінальні явні відповіді скасовують очікувані редагування попереднього перегляду.
+ - Медіа, помилки та фінальні повідомлення з явною відповіддю скасовують очікувані редагування попереднього перегляду.
- `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду.
- Потокове передавання попереднього перегляду підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потокове передавання `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання.
+ Трансляція попереднього перегляду підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потокове передавання `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного стримінгу.
-
- Контекст історії гільдії:
+
+ Контекст історії guild:
- `channels.discord.historyLimit` за замовчуванням `20`
- - резервний варіант: `messages.groupChat.historyLimit`
+ - резервно: `messages.groupChat.historyLimit`
- `0` вимикає
- Керування історією DM:
+ Елементи керування історією DM:
- `channels.discord.dmHistoryLimit`
- `channels.discord.dms[""].historyLimit`
- Поведінка потоків:
+ Поведінка thread:
- - Потоки Discord маршрутизуються як сесії каналу й успадковують конфігурацію батьківського каналу, якщо її не перевизначено.
- - Сесії потоків успадковують вибір `/model` рівня сесії батьківського каналу як резервний варіант лише моделі; локальні для потоку вибори `/model` усе ще мають пріоритет, а історія transcript батьківського каналу не копіюється, якщо не ввімкнено успадкування transcript.
- - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових автоматичних потоків початкове наповнення з батьківського transcript. Перевизначення для окремих облікових записів розміщені в `channels.discord.accounts..thread.inheritParent`.
- - Реакції інструмента повідомлень можуть вирішувати DM-цілі `user:`.
+ - Discord threads маршрутизуються як сеанси каналу й успадковують конфігурацію батьківського каналу, якщо її не перевизначено.
+ - Сеанси thread успадковують вибір `/model` на рівні сеансу батьківського каналу як резерв лише для моделі; локальні вибори `/model` у thread усе ще мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо не ввімкнено успадкування транскрипту.
+ - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових auto-threads початкове наповнення з батьківського транскрипту. Перевизначення для окремого акаунта містяться в `channels.discord.accounts..thread.inheritParent`.
+ - Реакції інструмента повідомлень можуть розпізнавати цілі DM `user:`.
- `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді.
Теми каналів вставляються як **ненадійний** контекст. Списки дозволених визначають, хто може запускати агента, а не є повною межею редагування додаткового контексту.
-
- Discord може прив’язати потік до цілі сесії, щоб подальші повідомлення в цьому потоці продовжували маршрутизуватися до тієї самої сесії (включно із сесіями subagent).
+
+ Discord може прив’язати thread до цілі сеансу, щоб наступні повідомлення в цьому thread і далі маршрутизувалися до того самого сеансу (зокрема сеансів subagent).
Команди:
- - `/focus ` прив’язати поточний/новий потік до цілі subagent/сесії
- - `/unfocus` видалити прив’язку поточного потоку
+ - `/focus ` прив’язати поточний/новий thread до цілі subagent/сеансу
+ - `/unfocus` видалити прив’язку поточного thread
- `/agents` показати активні запуски та стан прив’язки
- - `/session idle ` переглянути/оновити автоматичний unfocus через неактивність для сфокусованих прив’язок
+ - `/session idle ` переглянути/оновити авто-unfocus за неактивністю для сфокусованих прив’язок
- `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок
Конфігурація:
@@ -643,18 +644,18 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- - `session.threadBindings.*` задає глобальні значення за замовчуванням.
+ - `session.threadBindings.*` задає глобальні типові значення.
- `channels.discord.threadBindings.*` перевизначає поведінку Discord.
- - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для `sessions_spawn({ thread: true })`.
- - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`).
- - Якщо прив’язки потоків вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки потоків недоступні.
+ - `spawnSubagentSessions` має бути `true`, щоб автоматично створювати/прив’язувати гілки для `sessions_spawn({ thread: true })`.
+ - `spawnAcpSessions` має бути `true`, щоб автоматично створювати/прив’язувати гілки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`).
+ - Якщо прив’язки гілок вимкнені для облікового запису, `/focus` і пов’язані операції прив’язки гілок недоступні.
Див. [Субагенти](/uk/tools/subagents), [Агенти ACP](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference).
-
- Для стабільних "завжди ввімкнених" робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord.
+
+ Для стабільних «завжди ввімкнених» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord.
Шлях конфігурації:
@@ -710,47 +711,47 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- - `/acp spawn codex --bind here` прив’язує поточний канал або гілку на місці та зберігає майбутні повідомлення в тому самому сеансі ACP. Повідомлення в гілці успадковують прив’язку батьківського каналу.
- - У прив’язаному каналі або гілці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив’язки гілок можуть перевизначати визначення цілі, доки активні.
- - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити або прив’язати дочірню гілку через `--thread auto|here`.
+ - `/acp spawn codex --bind here` прив’язує поточний канал або гілку на місці й зберігає майбутні повідомлення в тій самій сесії ACP. Повідомлення гілки успадковують прив’язку батьківського каналу.
+ - У прив’язаному каналі або гілці `/new` і `/reset` скидають ту саму сесію ACP на місці. Тимчасові прив’язки гілок можуть перевизначати визначення цілі, поки активні.
+ - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірню гілку через `--thread auto|here`.
- Докладніше про поведінку прив’язок див. у [ACP Agents](/uk/tools/acp-agents).
+ Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив’язок.
- Режим сповіщень про реакції для окремої гільдії:
+ Режим сповіщень про реакції для кожної гільдії:
- `off`
- `own` (типово)
- `all`
- `allowlist` (використовує `guilds..users`)
- Події реакцій перетворюються на системні події та додаються до маршрутизованого сеансу Discord.
+ Події реакцій перетворюються на системні події та додаються до маршрутизованої сесії Discord.
- `ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення.
+ `ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
- `channels.discord.accounts..ackReaction`
- `channels.discord.ackReaction`
- `messages.ackReaction`
- - резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
+ - резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
Примітки:
- - Discord приймає unicode emoji або назви користувацьких emoji.
+ - Discord приймає емодзі Unicode або назви власних емодзі.
- Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису.
- Записи конфігурації, ініційовані каналом, увімкнено за замовчуванням.
+ Записи конфігурації, ініційовані каналом, увімкнені типово.
- Це впливає на потоки `/config set|unset` (коли функції команд увімкнено).
+ Це впливає на потоки `/config set|unset` (коли функції команд увімкнені).
Вимкнення:
@@ -767,7 +768,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
- Спрямовуйте WebSocket-трафік Discord Gateway і стартові REST-запити пошуку (ідентифікатор застосунку + визначення списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`.
+ Маршрутизуйте трафік Discord Gateway WebSocket і стартові REST-пошуки (ID застосунку + визначення списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`.
```json5
{
@@ -779,7 +780,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Перевизначення для окремого облікового запису:
+ Перевизначення для облікового запису:
```json5
{
@@ -798,7 +799,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
- Увімкніть визначення PluralKit, щоб зіставляти проксовані повідомлення з ідентичністю учасника системи:
+ Увімкніть визначення PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи:
```json5
{
@@ -816,9 +817,9 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- списки дозволених можуть використовувати `pk:`
- - відображувані імена учасників зіставляються за назвою/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true`
- - пошуки використовують початковий ідентифікатор повідомлення та обмежені часовим вікном
- - якщо пошук не вдається, проксовані повідомлення вважаються повідомленнями бота та відкидаються, якщо `allowBots=true` не задано
+ - відображувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true`
+ - пошуки використовують початковий ID повідомлення й обмежені часовим вікном
+ - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо не встановлено `allowBots=true`
@@ -870,10 +871,10 @@ Slash-команди `/model` і `/models` відкривають інтерак
- 1: Транслює (потребує `activityUrl`)
- 2: Слухає
- 3: Дивиться
- - 4: Користувацька (використовує текст активності як стан статусу; emoji необов’язковий)
+ - 4: Користувацька (використовує текст активності як стан статусу; емодзі необов’язковий)
- 5: Змагається
- Приклад автоматичної присутності (сигнал стану runtime):
+ Приклад автоматичної присутності (сигнал справності runtime):
```json5
{
@@ -890,7 +891,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Автоматична присутність зіставляє доступність runtime зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов’язкові перевизначення тексту:
+ Автоматична присутність зіставляє доступність runtime зі статусом Discord: справний => онлайн, деградований або невідомий => неактивний, вичерпаний або недоступний => dnd. Необов’язкові перевизначення тексту:
- `autoPresence.healthyText`
- `autoPresence.degradedText`
@@ -899,7 +900,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
- Discord підтримує обробку схвалень через кнопки в особистих повідомленнях і може необов’язково публікувати запити на схвалення у вихідному каналі.
+ Discord підтримує обробку схвалень на основі кнопок у DM і може додатково публікувати запити на схвалення у вихідному каналі.
Шлях конфігурації:
@@ -908,53 +909,53 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`)
- `agentFilter`, `sessionFilter`, `cleanupAfterResolve`
- Discord автоматично вмикає нативні схвалення виконання, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного схвалювача, або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить схвалювачів виконання з `allowFrom` каналу, застарілого `dm.allowFrom` або `defaultTo` для особистих повідомлень. Задайте `enabled: false`, щоб явно вимкнути Discord як нативний клієнт схвалень.
+ Discord автоматично вмикає нативні exec-схвалення, коли `enabled` не задано або дорівнює `"auto"` і можна визначити принаймні одного схвалювача, або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить exec-схвалювачів із канального `allowFrom`, застарілого `dm.allowFrom` або direct-message `defaultTo`. Установіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт схвалень.
- Коли `target` має значення `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені схвалювачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тож вмикайте доставку в канал лише в довірених каналах. Якщо ідентифікатор каналу неможливо вивести з ключа сеансу, OpenClaw повертається до доставки в особисті повідомлення.
+ Коли `target` дорівнює `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені схвалювачі можуть користуватися кнопками; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу не можна вивести з ключа сесії, OpenClaw повертається до доставки через DM.
- Discord також відображає спільні кнопки схвалення, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію особистих повідомлень схвалювачам і розсилання в канали.
- Коли ці кнопки наявні, вони є основним UX схвалення; OpenClaw
- має додавати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє,
- що схвалення в чаті недоступні або ручне схвалення є єдиним шляхом.
+ Discord також відображає спільні кнопки схвалень, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для схвалювачів і розсилання в канали.
+ Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw
+ має включати ручну команду `/approve` лише тоді, коли результат інструмента каже,
+ що чат-схвалення недоступні або ручне схвалення є єдиним шляхом.
- Автентифікація Gateway і визначення схвалень дотримуються спільного контракту клієнта Gateway (`plugin:` IDs визначаються через `plugin.approval.resolve`; інші IDs через `exec.approval.resolve`). За замовчуванням схвалення спливають через 30 хвилин.
+ Автентифікація Gateway і визначення схвалень дотримуються спільного контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID — через `exec.approval.resolve`). Схвалення типово спливають через 30 хвилин.
- Див. [Exec approvals](/uk/tools/exec-approvals).
+ Див. [Exec-схвалення](/uk/tools/exec-approvals).
-## Інструменти та шлюзи дій
+## Інструменти й шлюзи дій
-Дії повідомлень Discord включають обмін повідомленнями, адміністрування каналів, модерацію, присутність і дії з метаданими.
+Дії повідомлень Discord охоплюють надсилання повідомлень, адміністрування каналів, модерацію, присутність і дії з метаданими.
Основні приклади:
-- обмін повідомленнями: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply`
+- повідомлення: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply`
- реакції: `react`, `reactions`, `emojiList`
- модерація: `timeout`, `kick`, `ban`
- присутність: `setPresence`
Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб задати обкладинку запланованої події.
-Шлюзи дій розташовані в `channels.discord.actions.*`.
+Шлюзи дій розміщені в `channels.discord.actions.*`.
Типова поведінка шлюзів:
| Група дій | Типово |
-| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено |
-| roles | вимкнено |
-| moderation | вимкнено |
-| presence | вимкнено |
+| roles | вимкнено |
+| moderation | вимкнено |
+| presence | вимкнено |
-## Інтерфейс Components v2
+## UI Components v2
-OpenClaw використовує компоненти Discord v2 для схвалень виконання та маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького інтерфейсу (розширене використання; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані.
+OpenClaw використовує Discord components v2 для exec-схвалень і міжконтекстних маркерів. Дії повідомлень Discord також можуть приймати `components` для користувацького UI (розширено; потребує побудови payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані.
- `channels.discord.ui.components.accentColor` задає акцентний колір, який використовують контейнери компонентів Discord (hex).
-- Задайте для окремого облікового запису через `channels.discord.accounts..ui.components.accentColor`.
-- `embeds` ігноруються, коли наявні компоненти v2.
+- Задавайте для кожного облікового запису через `channels.discord.accounts..ui.components.accentColor`.
+- `embeds` ігноруються, коли присутні components v2.
Приклад:
@@ -974,7 +975,7 @@ OpenClaw використовує компоненти Discord v2 для схв
## Голос
-Discord має дві окремі голосові поверхні: голосові канали в реальному часі (безперервні розмови) і вкладення голосових повідомлень (формат попереднього перегляду хвилі). Gateway підтримує обидві.
+Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвилі). Gateway підтримує обидві.
### Голосові канали
@@ -982,12 +983,12 @@ Discord має дві окремі голосові поверхні: голос
1. Увімкніть Message Content Intent у Discord Developer Portal.
2. Увімкніть Server Members Intent, коли використовуються списки дозволених ролей/користувачів.
-3. Запросіть бота зі scope `bot` і `applications.commands`.
-4. Надайте дозволи Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі.
+3. Запросіть бота зі scopes `bot` і `applications.commands`.
+4. Надайте Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі.
5. Увімкніть нативні команди (`commands.native` або `channels.discord.commands.native`).
6. Налаштуйте `channels.discord.voice`.
-Використовуйте `/vc join|leave|status` для керування сеансами. Команда використовує типового агента облікового запису та дотримується тих самих правил списків дозволених і групової політики, що й інші команди Discord.
+Використовуйте `/vc join|leave|status`, щоб керувати сесіями. Команда використовує типового агента облікового запису й дотримується тих самих правил списку дозволених і групової політики, що й інші команди Discord.
```bash
/vc join channel:
@@ -1025,33 +1026,33 @@ Discord має дві окремі голосові поверхні: голос
Примітки:
- `voice.tts` перевизначає `messages.tts` лише для голосового відтворення.
-- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосових каналах Discord. Залиште це значення незаданим, щоб успадкувати модель маршрутизованого агента.
-- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрибування.
-- Ходи голосової транскрипції визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`).
-- Голос увімкнено типово; задайте `channels.discord.voice.enabled=false`, щоб вимкнути голосове середовище виконання і Gateway intent `GuildVoiceStates`.
-- `channels.discord.intents.voiceStates` може явно перевизначити підписку на voice-state intent. Залиште його незаданим, щоб intent відповідав `voice.enabled`.
-- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються до параметрів приєднання `@discordjs/voice`.
-- Типові значення `@discordjs/voice`: `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано.
-- OpenClaw також відстежує збої розшифрування під час приймання й автоматично відновлюється, виходячи з голосового каналу та приєднуючись до нього знову після повторних збоїв у короткому часовому вікні.
-- Якщо після оновлення журнали приймання неодноразово показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить виправлення padding з upstream із PR discord.js #11449, який закрив issue discord.js #11419.
+- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосовому каналі Discord. Залиште не заданим, щоб успадкувати модель агента з маршрутизації.
+- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрипцію.
+- Ходи голосового транскрипту визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`).
+- Голос увімкнено за замовчуванням; установіть `channels.discord.voice.enabled=false`, щоб вимкнути голосове середовище виконання та Gateway-інтент `GuildVoiceStates`.
+- `channels.discord.intents.voiceStates` може явно перевизначити підписку на інтенти стану голосу. Залиште не заданим, щоб інтент відповідав `voice.enabled`.
+- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються в параметри підключення `@discordjs/voice`.
+- Значення за замовчуванням `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо не задано.
+- OpenClaw також відстежує збої розшифрування під час отримання й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись до нього після повторних збоїв у короткому проміжку часу.
+- Якщо після оновлення в журналах отримання повторно з’являється `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить upstream-виправлення padding із discord.js PR #11449, яке закрило issue discord.js #11419.
Конвеєр голосового каналу:
-- PCM-захоплення Discord перетворюється на тимчасовий WAV-файл.
+- Захоплення PCM із Discord перетворюється на тимчасовий WAV-файл.
- `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`.
-- Транскрипт надсилається через звичайний вхідний потік і маршрутизацію Discord.
+- Транскрипт надсилається через звичайний вхід Discord і маршрутизацію.
- `voice.model`, якщо задано, перевизначає лише LLM відповіді для цього ходу голосового каналу.
- `voice.tts` об’єднується поверх `messages.tts`; отримане аудіо відтворюється в приєднаному каналі.
-Облікові дані визначаються окремо для кожного компонента: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`.
+Облікові дані визначаються для кожного компонента окремо: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`.
### Голосові повідомлення
-Голосові повідомлення Discord показують попередній перегляд форми хвилі та потребують аудіо OGG/Opus. OpenClaw генерує форму хвилі автоматично, але потребує `ffmpeg` і `ffprobe` на хості Gateway для перевірки та конвертації.
+Голосові повідомлення Discord показують попередній перегляд хвилі та потребують аудіо OGG/Opus. OpenClaw генерує хвилю автоматично, але потребує `ffmpeg` і `ffprobe` на хості Gateway для аналізу та перетворення.
- Надайте **локальний шлях до файлу** (URL-адреси відхиляються).
- Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload).
-- Приймається будь-який аудіоформат; OpenClaw конвертує в OGG/Opus за потреби.
+- Приймається будь-який аудіоформат; OpenClaw за потреби перетворює його на OGG/Opus.
```bash
message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true)
@@ -1060,19 +1061,19 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a
## Усунення несправностей
-
+
- увімкніть Message Content Intent
- увімкніть Server Members Intent, коли ви залежите від визначення користувача/учасника
- - перезапустіть Gateway після зміни intents
+ - перезапустіть Gateway після зміни інтентів
-
+
- перевірте `groupPolicy`
- - перевірте allowlist guild у `channels.discord.guilds`
- - якщо існує мапа `channels` для guild, дозволені лише перелічені канали
+ - перевірте allowlist гільдії в `channels.discord.guilds`
+ - якщо існує мапа `channels` для гільдії, дозволені лише перелічені канали
- перевірте поведінку `requireMention` і шаблони згадок
Корисні перевірки:
@@ -1085,16 +1086,16 @@ openclaw logs --follow
-
+
Поширені причини:
- - `groupPolicy="allowlist"` без відповідного allowlist guild/каналу
- - `requireMention` налаштовано в неправильному місці (має бути під `channels.discord.guilds` або записом каналу)
- - відправника заблоковано allowlist `users` guild/каналу
+ - `groupPolicy="allowlist"` без відповідного allowlist гільдії/каналу
+ - `requireMention` налаштовано не в тому місці (має бути в `channels.discord.guilds` або записі каналу)
+ - відправника заблоковано allowlist `users` гільдії/каналу
-
+
Типові журнали:
@@ -1102,16 +1103,16 @@ openclaw logs --follow
- `Slow listener detected ...`
- `discord inbound worker timed out after ...`
- Перемикач бюджету слухача:
+ Перемикач бюджету listener:
- один обліковий запис: `channels.discord.eventQueue.listenerTimeout`
- кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout`
- Перемикач тайм-ауту запуску worker:
+ Перемикач тайм-ауту виконання worker:
- один обліковий запис: `channels.discord.inboundWorker.runTimeoutMs`
- кілька облікових записів: `channels.discord.accounts..inboundWorker.runTimeoutMs`
- - типово: `1800000` (30 хвилин); задайте `0`, щоб вимкнути
+ - за замовчуванням: `1800000` (30 хвилин); установіть `0`, щоб вимкнути
Рекомендована базова конфігурація:
@@ -1134,55 +1135,55 @@ openclaw logs --follow
}
```
- Використовуйте `eventQueue.listenerTimeout` для повільного налаштування слухача, а `inboundWorker.runTimeoutMs`
+ Використовуйте `eventQueue.listenerTimeout` для повільного налаштування listener і `inboundWorker.runTimeoutMs`
лише якщо потрібен окремий запобіжний клапан для поставлених у чергу ходів агента.
-
- OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до типової URL-адреси Gateway Discord і обмежуються за частотою в журналах.
+
+ OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартної Gateway URL-адреси Discord і обмежуються за частотою в журналах.
Перемикачі тайм-ауту метаданих:
- один обліковий запис: `channels.discord.gatewayInfoTimeoutMs`
- кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs`
- - резервне env-значення, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
- - типово: `30000` (30 секунд), максимум: `120000`
+ - fallback через env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
+ - за замовчуванням: `30000` (30 секунд), максимум: `120000`
-
+
Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів.
Якщо ви використовуєте slug-ключі, зіставлення під час виконання все ще може працювати, але probe не може повністю перевірити дозволи.
-
+
- DM вимкнено: `channels.discord.dm.enabled=false`
- - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`)
+ - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (legacy: `channels.discord.dm.policy`)
- очікується схвалення сполучення в режимі `pairing`
-
- Типово повідомлення, створені ботами, ігноруються.
+
+ За замовчуванням повідомлення, створені ботами, ігноруються.
- Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і allowlist, щоб уникнути циклічної поведінки.
+ Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте строгі правила згадок і allowlist, щоб уникнути зациклення.
Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота.
-
+
- - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була наявна логіка відновлення приймання голосу Discord
- - підтвердьте `channels.discord.voice.daveEncryption=true` (типово)
- - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (типове значення upstream) і налаштовуйте лише за потреби
- - відстежуйте в журналах:
+ - підтримуйте OpenClaw актуальним (`openclaw update`), щоб логіка відновлення отримання голосу Discord була присутня
+ - підтвердьте `channels.discord.voice.daveEncryption=true` (за замовчуванням)
+ - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (upstream-значення за замовчуванням) і налаштовуйте лише за потреби
+ - стежте в журналах за:
- `discord voice: DAVE decrypt failures detected`
- `discord voice: repeated decrypt failures; attempting rejoin`
- - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали й порівняйте з upstream-історією приймання DAVE у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449)
+ - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали та порівняйте з upstream-історією отримання DAVE у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449)
@@ -1191,50 +1192,50 @@ openclaw logs --follow
Основний довідник: [Довідник конфігурації - Discord](/uk/gateway/config-channels#discord).
-
+
- запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots`
- політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*`
- команда: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*`
-- черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency`
-- вхідний worker: `inboundWorker.runTimeoutMs`
+- черга подій: `eventQueue.listenerTimeout` (бюджет listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency`
+- inbound worker: `inboundWorker.runTimeoutMs`
- метадані Gateway: `gatewayInfoTimeoutMs`
- відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
-- streaming: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce`
-- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry`
+- streaming: `streaming` (legacy alias: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce`
+- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, за замовчуванням `100MB`), `retry`
- дії: `actions.*`
-- присутність: `activity`, `status`, `activityType`, `activityUrl`
+- presence: `activity`, `status`, `activityType`, `activityUrl`
- UI: `ui.components.accentColor`
-- функції: `threadBindings`, top-level `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix`
+- функції: `threadBindings`, верхньорівневий `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix`
## Безпека та операції
-- Розглядайте токени ботів як секрети (у керованих середовищах бажано `DISCORD_BOT_TOKEN`).
-- Надавайте дозволи Discord за принципом найменших привілеїв.
-- Якщо розгортання/стан команд застарів, перезапустіть Gateway і повторно перевірте за допомогою `openclaw channels status --probe`.
+- Вважайте токени ботів секретами (`DISCORD_BOT_TOKEN` бажано в керованих середовищах).
+- Надавайте мінімально необхідні дозволи Discord.
+- Якщо розгортання/стан команди застаріли, перезапустіть Gateway і повторно перевірте за допомогою `openclaw channels status --probe`.
## Пов’язане
-
+
Сполучіть користувача Discord із Gateway.
-
- Поведінка групового чату й allowlist.
+
+ Груповий чат і поведінка allowlist.
-
+
Маршрутизуйте вхідні повідомлення до агентів.
-
+
Модель загроз і посилення захисту.
-
- Зіставляйте guilds і канали з агентами.
+
+ Зіставляйте гільдії та канали з агентами.
- Поведінка нативних команд.
+ Поведінка native-команд.