diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md
index 315cd87f2..f1cca12c1 100644
--- a/docs/uk/channels/discord.md
+++ b/docs/uk/channels/discord.md
@@ -1,65 +1,65 @@
---
read_when:
- Робота над функціями каналу Discord
-summary: Стан підтримки бота Discord, можливості та конфігурація
+summary: Стан підтримки Discord-бота, можливості та конфігурація
title: Discord
x-i18n:
- generated_at: "2026-04-30T00:56:00Z"
+ generated_at: "2026-05-01T10:09:56Z"
model: gpt-5.5
provider: openai
- source_hash: e9f31af2801e7faf6456d4452a5f43b0e42a067b86b7e562c308fa450a847356
+ source_hash: cd12f85a0acb30f606ef97512c04b443b2be301272962340cb08596f91489bd2
source_path: channels/discord.md
workflow: 16
---
-Готово для DM і каналів гільдій через офіційний Discord gateway.
+Готово для приватних повідомлень і каналів guild через офіційний Discord gateway.
-
- Discord DM за замовчуванням переходять у режим спарювання.
+
+ Приватні повідомлення 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](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** (рекомендовано; потрібно для allowlist ролей і зіставлення імен з ID)
+ - **Server Members Intent** (рекомендовано; обов’язково для списків дозволених ролей і зіставлення імен з ID)
- **Presence Intent** (необов’язково; потрібно лише для оновлень присутності)
- Прокрутіть угору на сторінці **Bot** і натисніть **Reset Token**.
+ Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**.
- Попри назву, це генерує ваш перший токен — нічого не "скидається".
+ Попри назву, це створює ваш перший токен — нічого не "скидається".
- Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро знадобиться.
+ Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро вам знадобиться.
-
- Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на свій сервер.
+
+ Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на сервер.
Прокрутіть униз до **OAuth2 URL Generator** і увімкніть:
@@ -77,31 +77,31 @@ x-i18n:
- Attach Files
- Add Reactions (необов’язково)
- Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах 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**
+ 2. Клацніть правою кнопкою миші **піктограму сервера** на бічній панелі → **Copy Server ID**
+ 3. Клацніть правою кнопкою миші **власний аватар** → **Copy User ID**
- Збережіть ваші **Server ID** і **User ID** поряд із Bot Token — на наступному кроці ви надішлете всі три до OpenClaw.
+ Збережіть **Server ID** і **User ID** разом із Bot Token — на наступному кроці ви надішлете всі три в OpenClaw.
-
- Щоб спарювання працювало, Discord має дозволяти вашому боту надсилати вам DM. Клацніть правою кнопкою вашу **іконку сервера** → **Privacy Settings** → увімкніть **Direct Messages**.
+
+ Щоб сполучення працювало, Discord має дозволити вашому боту надсилати вам приватні повідомлення. Клацніть правою кнопкою миші **піктограму сервера** → **Privacy Settings** → увімкніть **Direct Messages**.
- Це дозволяє учасникам сервера (зокрема ботам) надсилати вам DM. Залиште це ввімкненим, якщо хочете використовувати Discord DM з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути DM після спарювання.
+ Це дозволяє учасникам сервера (зокрема ботам) надсилати вам приватні повідомлення. Залиште це ввімкненим, якщо хочете використовувати приватні повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали guild, після сполучення приватні повідомлення можна вимкнути.
-
- Токен вашого бота Discord — це секрет (як пароль). Задайте його на машині, де працює OpenClaw, перш ніж писати своєму агенту.
+
+ Токен вашого бота Discord є секретом (як пароль). Задайте його на машині, де працює OpenClaw, перш ніж писати своєму агенту.
```bash
export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN"
@@ -120,19 +120,19 @@ openclaw config patch --file ./discord.patch.json5
openclaw gateway
```
- Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через застосунок OpenClaw для Mac або зупинивши й повторно запустивши процес `openclaw gateway run`.
- Для інсталяцій керованого сервісу запустіть `openclaw gateway install` з shell, де присутня `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв’язати env SecretRef після перезапуску.
- Якщо ваш хост заблокований або обмежений за частотою запитів під час стартового пошуку програми в Discord, задайте ID програми/клієнта Discord з Порталу розробників, щоб запуск міг пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для типового облікового запису або `channels.discord.accounts..applicationId`, коли запускаєте кілька ботів Discord.
+ Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через Mac-застосунок OpenClaw або зупинивши й запустивши заново процес `openclaw gateway run`.
+ Для керованих інсталяцій сервісу виконайте `openclaw gateway install` з shell, де присутній `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв’язати env SecretRef після перезапуску.
+ Якщо ваш хост заблокований або обмежений за частотою запитів під час початкового пошуку застосунку Discord, задайте ID застосунку/клієнта Discord із Developer Portal, щоб запуск міг пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для облікового запису за замовчуванням або `channels.discord.accounts..applicationId`, коли запускаєте кілька ботів Discord.
-
+
- Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / конфігурація.
+ Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому це. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / конфігурація.
- > "Я вже задав токен свого бота Discord у конфігурації. Завершіть налаштування Discord з User ID `` і Server ID ``."
+ > "I already set my Discord bot token in config. Please finish Discord setup with User ID `` and Server ID ``."
Якщо ви віддаєте перевагу файловій конфігурації, задайте:
@@ -152,15 +152,15 @@ openclaw gateway
}
```
- Env fallback для типового облікового запису:
+ Env fallback для облікового запису за замовчуванням:
```bash
DISCORD_BOT_TOKEN=...
```
- Для скриптового або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторно запустіть без `--dry-run`. Значення `token` у відкритому тексті підтримуються. Значення SecretRef також підтримуються для `channels.discord.token` через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets).
+ Для сценарного або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторіть запуск без `--dry-run`. Підтримуються plaintext значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets).
- Для кількох ботів Discord тримайте токен кожного бота та ID програми в його обліковому записі. Верхньорівневий `channels.discord.applicationId` успадковується обліковими записами, тому задавайте його там лише тоді, коли кожен обліковий запис має використовувати той самий ID програми.
+ Для кількох ботів Discord зберігайте токен і ID застосунку кожного бота в його обліковому записі. Верхньорівневий `channels.discord.applicationId` успадковується обліковими записами, тому задавайте його там лише тоді, коли всі облікові записи мають використовувати той самий ID застосунку.
```json5
{
@@ -187,14 +187,14 @@ DISCORD_BOT_TOKEN=...
-
- Зачекайте, доки gateway запрацює, а потім напишіть своєму боту в DM у Discord. Він відповість кодом спарювання.
+
+ Дочекайтеся, доки gateway запрацює, а потім надішліть приватне повідомлення своєму боту в Discord. Він відповість кодом сполучення.
- Надішліть код спарювання своєму агенту в наявному каналі:
+ Надішліть код сполучення своєму агенту у вашому наявному каналі:
- > "Підтвердь цей код спарювання Discord: ``"
+ > "Approve this Discord pairing code: ``"
@@ -206,30 +206,30 @@ openclaw pairing approve discord
- Коди спарювання спливають через 1 годину.
+ Коди сполучення спливають через 1 годину.
- Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через DM.
+ Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення.
-Розв’язання токенів враховує обліковий запис. Значення токена в конфігурації мають пріоритет над env fallback. `DISCORD_BOT_TOKEN` використовується лише для типового облікового запису.
-Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один монітор gateway для цього токена. Токен із конфігурації має пріоритет над типовим env fallback; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис повідомляється як вимкнений.
-Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується для цього виклику. Це застосовується до дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному знімку runtime.
+Розв’язання токена враховує обліковий запис. Значення токена з конфігурації мають пріоритет над env fallback. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням.
+Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один монітор gateway для цього токена. Токен із конфігурації має пріоритет над стандартним env fallback; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис позначається як вимкнений.
+Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій надсилання й читання/перевірки (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному runtime-знімку.
-## Рекомендовано: налаштуйте робочий простір гільдії
+## Рекомендовано: налаштуйте робочий простір guild
-Коли DM запрацюють, ви можете налаштувати свій сервер Discord як повний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.
+Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.
-
- Це дозволяє вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в DM.
+
+ Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях.
- > "Додай мій Discord Server ID `` до allowlist гільдій"
+ > "Add my Discord Server ID `` to the guild allowlist"
@@ -255,16 +255,16 @@ openclaw pairing approve discord
- За замовчуванням ваш агент відповідає в каналах гільдії лише тоді, коли його @згадали. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення.
+ За замовчуванням ваш агент відповідає в каналах guild лише тоді, коли його згадують через @mention. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення.
- У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, тому агент може за замовчуванням залишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
+ У каналах guild звичайні фінальні відповіді помічника за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно через інструмент `message`, тому агент може за замовчуванням залишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
- > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути @згаданим"
+ > "Allow my agent to respond on this server without having to be @mentioned"
- Задайте `requireMention: false` у конфігурації гільдії:
+ Задайте `requireMention: false` у конфігурації guild:
```json5
{
@@ -287,45 +287,45 @@ openclaw pairing approve discord
-
- За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях DM. Канали гільдії не завантажують MEMORY.md автоматично.
+
+ За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях приватних повідомлень. Канали guild не завантажують MEMORY.md автоматично.
- > "Коли я ставлю запитання в каналах Discord, використовуй memory_search або memory_get, якщо тобі потрібен довгостроковий контекст із MEMORY.md."
+ > "When I ask questions in Discord channels, use memory_search or memory_get if you need long-term context from 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.
-- Метадані guild/channel Discord додаються до запиту моделі як ненадійний
- контекст, а не як видимий користувачеві префікс відповіді. Якщо модель копіює цю обгортку
+- Gateway володіє підключенням Discord.
+- Маршрутизація відповідей детермінована: вхідні відповіді з Discord повертаються до Discord.
+- Метадані гільдії/каналу Discord додаються до промпта моделі як недовірений
+ контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт
назад, OpenClaw вилучає скопійовані метадані з вихідних відповідей і з
майбутнього контексту повторного відтворення.
-- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують головний сеанс агента (`agent:main:main`).
-- Канали guild ізольовані ключами сеансів (`agent::discord:channel:`).
-- Групові DM ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`).
-- Нативні slash-команди виконуються в ізольованих командних сеансах (`agent::discord:slash:`), але все одно передають `CommandTargetSessionKey` до маршрутизованого сеансу розмови.
-- Доставка оголошень текстових Cron/Heartbeat до Discord використовує остаточну
+- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основну сесію агента (`agent:main:main`).
+- Канали гільдій ізольовані ключами сесій (`agent::discord:channel:`).
+- Групові DM за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`).
+- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), але водночас передають `CommandTargetSessionKey` до маршрутизованої сесії розмови.
+- Доставка текстових оголошень cron/heartbeat до Discord використовує остаточну
видиму асистенту відповідь один раз. Медіа та структуровані payload компонентів залишаються
- багатоповідомними, коли агент видає кілька придатних до доставки payload.
+ багатоповідомними, коли агент видає кілька payload, придатних до доставки.
## Канали форумів
-Форумні та медіаканали Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення:
+Канали форумів і медіа в Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення:
- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити тред. Заголовок треду використовує перший непорожній рядок вашого повідомлення.
-- Використайте `openclaw message thread create`, щоб створити тред безпосередньо. Не передавайте `--message-id` для форумних каналів.
+- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для каналів форумів.
Приклад: надіслати до батьківського форуму, щоб створити тред
@@ -334,7 +334,7 @@ openclaw message send --channel discord --target channel: \
--message "Topic title\nBody of the post"
```
-Приклад: явно створити форумний тред
+Приклад: явно створити тред форуму
```bash
openclaw message thread create --channel discord --target channel: \
@@ -345,7 +345,7 @@ openclaw message thread create --channel discord --target channel: \
## Інтерактивні компоненти
-OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`.
+OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агентів. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодій маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`.
Підтримувані блоки:
@@ -353,21 +353,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` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору є ефемерною, і використовувати її може лише користувач, який її викликав.
-Вкладення файлів:
+Файлові вкладення:
-- Блоки `file` мають указувати на посилання вкладення (`attachment://`)
+- Блоки `file` мають вказувати на посилання вкладення (`attachment://`)
- Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів
-- Використовуйте `filename`, щоб перевизначити ім'я завантаження, коли воно має збігатися з посиланням вкладення
+- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням вкладення
Модальні форми:
-- Додайте `components.modal` з максимум 5 полями
+- Додайте `components.modal` з до 5 полями
- Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select`
- OpenClaw автоматично додає кнопку запуску
@@ -425,7 +425,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
-## Контроль доступу та маршрутизація
+## Керування доступом і маршрутизація
@@ -433,46 +433,46 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `pairing` (за замовчуванням)
- `allowlist`
- - `open` (вимагає, щоб `channels.discord.allowFrom` містив `"*"`)
+ - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`)
- `disabled`
- Якщо політика DM не є відкритою, невідомих користувачів блокують (або пропонують виконати pairing у режимі `pairing`).
+ Якщо політика DM не відкрита, невідомих користувачів блокують (або пропонують створити пару в режимі `pairing`).
- Пріоритетність кількох облікових записів:
+ Пріоритетність кількох акаунтів:
- - `channels.discord.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
- - Для одного облікового запису `allowFrom` має пріоритет над застарілим `dm.allowFrom`.
- - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застарілий `dm.allowFrom` не встановлені.
- - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`.
+ - `channels.discord.accounts.default.allowFrom` застосовується лише до акаунта `default`.
+ - Для одного акаунта `allowFrom` має пріоритет над застарілим `dm.allowFrom`.
+ - Іменовані акаунти успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застарілий `dm.allowFrom` не задані.
+ - Іменовані акаунти не успадковують `channels.discord.accounts.default.allowFrom`.
- Застарілі `channels.discord.dm.policy` і `channels.discord.dm.allowFrom` досі читаються для сумісності. `openclaw doctor --fix` мігрує їх у `dmPolicy` і `allowFrom`, коли може зробити це без зміни доступу.
+ Застарілі `channels.discord.dm.policy` і `channels.discord.dm.allowFrom` усе ще читаються для сумісності. `openclaw doctor --fix` мігрує їх у `dmPolicy` і `allowFrom`, коли це можна зробити без зміни доступу.
Формат цілі DM для доставки:
- `user:`
- згадка `<@id>`
- Голі числові ID зазвичай розпізнаються як ID каналів, коли активне стандартне значення каналу, але ID, перелічені в ефективному DM `allowFrom` облікового запису, для сумісності трактуються як цілі користувацьких DM.
+ Голі числові ID зазвичай розпізнаються як ID каналів, коли активне значення каналу за замовчуванням, але ID, перелічені в ефективному DM `allowFrom` акаунта, для сумісності трактуються як цілі користувацьких DM.
- Обробка guild керується `channels.discord.groupPolicy`:
+ Обробка гільдій керується `channels.discord.groupPolicy`:
- `open`
- `allowlist`
- `disabled`
- Безпечний базовий рівень, коли існує `channels.discord`, це `allowlist`.
+ Безпечний базовий режим, коли існує `channels.discord`, — `allowlist`.
Поведінка `allowlist`:
- - guild має відповідати `channels.discord.guilds` (переважно `id`, slug приймається)
- - необов'язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо будь-який із них налаштовано, відправники дозволені, коли вони збігаються з `users` АБО `roles`
- - пряме зіставлення імен/тегів вимкнено за замовчуванням; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності
- - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів
- - якщо guild має налаштовані `channels`, канали не зі списку забороняються
- - якщо guild не має блока `channels`, усі канали в цьому allowlisted guild дозволені
+ - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug приймається)
+ - необов'язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles`
+ - пряме зіставлення імен/тегів вимкнене за замовчуванням; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності
+ - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменами/тегами
+ - якщо гільдія має налаштовані `channels`, канали не зі списку забороняються
+ - якщо гільдія не має блоку `channels`, дозволені всі канали в цій гільдії з allowlist
Приклад:
@@ -498,33 +498,33 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Якщо ви встановили лише `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, runtime fallback — `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` має значення `open`.
+ Якщо ви лише задаєте `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, runtime fallback — `groupPolicy="allowlist"` (із попередженням у логах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`.
- Повідомлення guild за замовчуванням вимагають згадки.
+ Повідомлення гільдій за замовчуванням обмежені згадками.
- Виявлення згадок охоплює:
+ Виявлення згадок включає:
- явну згадку бота
- налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
- неявну поведінку відповіді боту в підтримуваних випадках
- `requireMention` налаштовується для кожного guild/каналу (`channels.discord.guilds...`).
+ `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`).
`ignoreOtherMentions` необов'язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here).
Групові DM:
- за замовчуванням: ігноруються (`dm.groupEnabled=false`)
- - необов'язковий allowlist через `dm.groupChannels` (ID каналів або slug)
+ - необов'язковий allowlist через `dm.groupChannels` (ID каналів або slugs)
### Маршрутизація агентів на основі ролей
-Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників guild Discord до різних агентів за ID ролі. Прив'язки на основі ролей приймають лише ID ролей і оцінюються після прив'язок peer або parent-peer та перед прив'язками лише до guild. Якщо прив'язка також задає інші поля збігу (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися.
+Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив'язки на основі ролей приймають лише ID ролей і оцінюються після прив'язок peer або parent-peer та перед прив'язками лише гільдії. Якщо прив'язка також задає інші поля збігу (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися.
```json5
{
@@ -548,25 +548,25 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
-## Нативні команди та auth команд
+## Нативні команди та авторизація команд
-- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord.
-- Перевизначення для окремого каналу: `channels.discord.commands.native`.
+- `commands.native` за замовчуванням дорівнює `"auto"` і ввімкнено для Discord.
+- Перевизначення для каналу: `channels.discord.commands.native`.
- `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord.
-- Auth нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень.
-- Команди все одно можуть бути видимими в UI Discord для користувачів, які не авторизовані; виконання все одно застосовує auth OpenClaw і повертає "not authorized".
+- Авторизація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень.
+- Команди можуть усе ще бути видимими в UI Discord для користувачів без авторизації; виконання все одно застосовує авторизацію OpenClaw і повертає "not authorized".
Див. [Slash-команди](/uk/tools/slash-commands) для каталогу команд і поведінки.
-Стандартні налаштування slash-команд:
+Налаштування slash-команд за замовчуванням:
- `ephemeral: true`
-## Подробиці функцій
+## Деталі функцій
- Discord підтримує теги відповідей у виводі агента:
+ Discord підтримує теги відповіді у виводі агента:
- `[[reply_to_current]]`
- `[[reply_to:]]`
@@ -578,21 +578,21 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `all`
- `batched`
- Примітка: `off` вимикає неявне створення тредів відповідей. Явні теги `[[reply_to_*]]` все одно враховуються.
- `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord за хід.
- `batched` додає неявне посилання нативної відповіді Discord лише тоді, коли
- вхідний хід був debounced-пакетом із кількох повідомлень. Це корисно,
- коли ви хочете мати нативні відповіді переважно для неоднозначних вибухових чатів, а не для кожного
+ Примітка: `off` вимикає неявне тредування відповідей. Явні теги `[[reply_to_*]]` усе ще враховуються.
+ `first` завжди додає неявне нативне посилання відповіді до першого вихідного повідомлення Discord за хід.
+ `batched` додає неявне нативне посилання відповіді Discord лише тоді, коли
+ вхідний хід був debounce-пакетом із кількох повідомлень. Це корисно,
+ коли нативні відповіді потрібні головно для неоднозначних сплесків чату, а не для кожного
ходу з одним повідомленням.
- ID повідомлень відображаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення.
+ ID повідомлень надаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення.
- OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення та редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` зіставляється з `partial` у Discord; `streamMode` є застарілим alias і мігрується автоматично.
+ OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення та редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` зіставляється з `partial` у Discord; `streamMode` є застарілим псевдонімом і мігрується автоматично.
- За замовчуванням лишається `off`, оскільки попередні редагування Discord швидко наштовхуються на rate limits, коли кілька ботів або gateways спільно використовують обліковий запис.
+ За замовчуванням залишається `off`, бо попередні редагування Discord швидко впираються в rate limits, коли кілька ботів або gateways спільно використовують акаунт.
```json5
{
@@ -611,21 +611,21 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів.
- `block` видає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`).
- - Медіа, помилки та фінальні відповіді з явним reply скасовують очікувані редагування попереднього перегляду.
+ - Медіа, помилка та фінальні повідомлення з явною відповіддю скасовують очікувані редагування попереднього перегляду.
- `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду.
- Потоковий попередній перегляд підтримує лише текст; медіавідповіді повертаються до звичайної доставки. Коли потоковий режим `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного стримінгу.
+ Потоковий попередній перегляд підтримує лише текст; медіавідповіді повертаються до звичайної доставки. Коли потокову передачу `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної потокової передачі.
- Контекст історії guild:
+ Контекст історії гільдії:
- `channels.discord.historyLimit` за замовчуванням `20`
- fallback: `messages.groupChat.historyLimit`
- `0` вимикає
- Керування історією DM:
+ Елементи керування історією DM:
- `channels.discord.dmHistoryLimit`
- `channels.discord.dms[""].historyLimit`
@@ -633,25 +633,25 @@ Slash-команди `/model` і `/models` відкривають інтерак
Поведінка гілок:
- Гілки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено.
- - Сеанси гілок успадковують вибір `/model` на рівні сеансу батьківського каналу як резервний варіант лише для моделі; локальні для гілки вибори `/model` все одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо не ввімкнено успадкування транскрипту.
- - `channels.discord.thread.inheritParent` (типово `false`) вмикає для нових автоматичних гілок початкове наповнення з батьківського транскрипту. Перевизначення для окремого облікового запису розміщуються в `channels.discord.accounts..thread.inheritParent`.
- - Реакції інструментів повідомлень можуть визначати цілі DM `user:`.
+ - Сеанси гілок успадковують вибір `/model` рівня сеансу батьківського каналу як резервний варіант лише для моделі; локальні для гілки вибори `/model` все одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо успадкування транскрипту не ввімкнено.
+ - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових авто-гілок початкове наповнення з батьківського транскрипту. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`.
+ - Реакції інструментів повідомлень можуть розпізнавати цілі DM `user:`.
- `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді.
- Теми каналів додаються як **ненадійний** контекст. Списки дозволених користувачів обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту.
+ Теми каналів додаються як **ненадійний** контекст. Списки дозволених визначають, хто може запускати агента, але не є повною межею редагування додаткового контексту.
-
- Discord може привʼязати гілку до цілі сеансу, щоб подальші повідомлення в цій гілці й далі маршрутизувалися до того самого сеансу (зокрема сеансів субагентів).
+
+ Discord може прив’язати гілку до цілі сеансу, щоб подальші повідомлення в цій гілці й надалі маршрутизувалися до того самого сеансу (зокрема сеансів субагентів).
Команди:
- - `/focus ` привʼязати поточну/нову гілку до цілі субагента/сеансу
- - `/unfocus` прибрати привʼязку поточної гілки
- - `/agents` показати активні запуски та стан привʼязки
- - `/session idle ` переглянути/оновити автоматичне скасування фокуса за неактивності для сфокусованих привʼязок
- - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих привʼязок
+ - `/focus ` прив’язати поточну/нову гілку до цілі субагента/сеансу
+ - `/unfocus` вилучити прив’язку поточної гілки
+ - `/agents` показати активні запуски та стан прив’язки
+ - `/session idle ` переглянути/оновити автоматичне зняття фокуса через неактивність для сфокусованих прив’язок
+ - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок
Конфігурація:
@@ -679,18 +679,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).
+ Див. [Субагенти](/uk/tools/subagents), [Агенти ACP](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference).
-
- Для стабільних ACP-робочих просторів у режимі «завжди ввімкнено» налаштуйте типізовані привʼязки ACP верхнього рівня, спрямовані на розмови Discord.
+
+ Для стабільних «завжди ввімкнених» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, що націлені на розмови Discord.
Шлях конфігурації:
@@ -746,30 +746,30 @@ 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-агентах](/uk/tools/acp-agents).
+ Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися більше про поведінку прив’язки.
- Режим сповіщень про реакції для окремої гільдії:
+ Режим сповіщень про реакції для кожної гільдії:
- `off`
- - `own` (типово)
+ - `own` (за замовчуванням)
- `all`
- `allowlist` (використовує `guilds..users`)
- Події реакцій перетворюються на системні події та прикріплюються до маршрутизованого сеансу Discord.
+ Події реакцій перетворюються на системні події та приєднуються до маршрутизованого сеансу Discord.
`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення.
- Порядок визначення:
+ Порядок розпізнавання:
- `channels.discord.accounts..ackReaction`
- `channels.discord.ackReaction`
@@ -778,17 +778,17 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- - Discord приймає unicode-емодзі або назви користувацьких емодзі.
+ - Discord приймає unicode-емодзі або назви власних емодзі.
- Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису.
- Записи конфігурації, ініційовані каналом, увімкнено типово.
+ Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням.
- Це впливає на потоки `/config set|unset` (коли функції команд увімкнено).
+ Це впливає на потоки `/config set|unset` (коли командні функції ввімкнені).
- Вимкнення:
+ Вимкнути:
```json5
{
@@ -802,8 +802,8 @@ Slash-команди `/model` і `/models` відкривають інтерак
-
- Маршрутизуйте WebSocket-трафік Discord Gateway і стартові REST-пошуки (ID застосунку + визначення списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`.
+
+ Маршрутизуйте WebSocket-трафік Discord gateway і стартові REST-пошуки (ID застосунку + розпізнавання списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`.
```json5
{
@@ -834,7 +834,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
- Увімкніть визначення PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи:
+ Увімкніть розпізнавання PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи:
```json5
{
@@ -852,9 +852,9 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- списки дозволених можуть використовувати `pk:`
- - показувані імена учасників зіставляються за іменем/слагом лише коли `channels.discord.dangerouslyAllowNameMatching: true`
- - пошуки використовують ID оригінального повідомлення та обмежені часовим вікном
- - якщо пошук не вдається, проксійовані повідомлення розглядаються як повідомлення бота й відкидаються, якщо `allowBots=true` не встановлено
+ - відображувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true`
+ - пошуки використовують ID початкового повідомлення та обмежені часовим вікном
+ - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не встановлено
@@ -873,7 +873,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Приклад активності (користувацький статус є типовим типом активності):
+ Приклад активності (власний статус є типовим типом активності):
```json5
{
@@ -906,7 +906,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
- 1: Транслює (потребує `activityUrl`)
- 2: Слухає
- 3: Дивиться
- - 4: Користувацький (використовує текст активності як стан статусу; емодзі необовʼязковий)
+ - 4: Власна (використовує текст активності як стан статусу; емодзі необов’язковий)
- 5: Змагається
Приклад автоматичної присутності (сигнал справності середовища виконання):
@@ -926,48 +926,48 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Автоматична присутність зіставляє доступність середовища виконання зі статусом Discord: справний => онлайн, деградований або невідомий => неактивний, вичерпаний або недоступний => не турбувати. Необовʼязкові перевизначення тексту:
+ Автоматична присутність зіставляє доступність середовища виконання зі статусом Discord: справне => online, погіршене або невідоме => idle, вичерпане або недоступне => dnd. Необов’язкові перевизначення тексту:
- `autoPresence.healthyText`
- `autoPresence.degradedText`
- - `autoPresence.exhaustedText` (підтримує плейсхолдер `{reason}`)
+ - `autoPresence.exhaustedText` (підтримує заповнювач `{reason}`)
- Discord підтримує обробку підтверджень на основі кнопок у DM і може необовʼязково публікувати запити підтвердження у вихідному каналі.
+ Discord підтримує обробку підтверджень на основі кнопок у DM і може необов’язково публікувати запити на підтвердження у вихідному каналі.
Шлях конфігурації:
- `channels.discord.execApprovals.enabled`
- - `channels.discord.execApprovals.approvers` (необовʼязково; за можливості резервно використовує `commands.ownerAllowFrom`)
- - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`)
+ - `channels.discord.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`)
+ - `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` або `defaultTo` для прямих повідомлень. Установіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт підтверджень.
- Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити підтвердження та фінальні результати приватно. Спочатку він пробує Discord DM, коли власник, який викликає команду, має маршрут власника Discord; якщо це недоступно, він резервно використовує перший доступний маршрут власника з `commands.ownerAllowFrom`, наприклад Telegram.
+ Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на підтвердження та фінальні результати приватно. Спочатку він пробує Discord DM, коли власник, що викликає команду, має маршрут власника Discord; якщо він недоступний, OpenClaw повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram.
- Коли `target` має значення `channel` або `both`, запит підтвердження видимий у каналі. Кнопки можуть використовувати лише визначені підтверджувачі; інші користувачі отримують ефемерну відмову. Запити підтвердження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу не можна вивести з ключа сеансу, OpenClaw резервно переходить до доставки через DM.
+ Коли `target` має значення `channel` або `both`, запит на підтвердження видимий у каналі. Лише розпізнані підтверджувачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на підтвердження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу не можна вивести з ключа сеансу, OpenClaw повертається до доставки через DM.
- Discord також відображає спільні кнопки підтвердження, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для підтверджувачів і розсилання в канал.
- Коли ці кнопки присутні, вони є основним UX підтверджень; OpenClaw
- має включати ручну команду `/approve` лише тоді, коли результат інструмента каже,
+ Discord також відображає спільні кнопки підтвердження, які використовуються іншими чат-каналами. Нативний адаптер Discord здебільшого додає маршрутизацію DM для підтверджувачів і розсилання в канал.
+ Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw
+ має додавати ручну команду `/approve` лише тоді, коли результат інструмента каже,
що чат-підтвердження недоступні або ручне підтвердження є єдиним шляхом.
- Якщо нативне середовище виконання підтверджень Discord неактивне, OpenClaw залишає
- локальний детермінований запит `/approve ` видимим. Якщо
- середовище виконання активне, але нативну картку неможливо доставити до жодної цілі,
+ Якщо нативне середовище виконання підтверджень Discord не активне, OpenClaw залишає
+ локальну детерміновану підказку `/approve ` видимою. Якщо
+ середовище виконання активне, але нативну картку не можна доставити жодній цілі,
OpenClaw надсилає резервне сповіщення в той самий чат із точною командою `/approve`
з очікуваного підтвердження.
- Автентифікація Gateway і визначення підтверджень дотримуються спільного контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID — через `exec.approval.resolve`). Термін дії підтверджень типово спливає через 30 хвилин.
+ Автентифікація Gateway і розпізнавання підтверджень дотримуються спільного контракту клієнта Gateway (ID `plugin:` розпізнаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). За замовчуванням термін дії підтверджень спливає через 30 хвилин.
- Див. [Підтвердження виконання](/uk/tools/exec-approvals).
+ Див. [Exec-підтвердження](/uk/tools/exec-approvals).
-## Інструменти та шлюзи дій
+## Інструменти й контролі доступу до дій
Дії повідомлень Discord включають обмін повідомленнями, адміністрування каналів, модерацію, присутність і дії з метаданими.
@@ -978,26 +978,26 @@ Slash-команди `/model` і `/models` відкривають інтерак
- модерація: `timeout`, `kick`, `ban`
- присутність: `setPresence`
-Дія `event-create` приймає необовʼязковий параметр `image` (URL або шлях до локального файлу), щоб задати зображення обкладинки запланованої події.
+Дія `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 | вимкнено |
+| Група дій | Типово |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- |
+| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено |
+| roles | вимкнено |
+| moderation | вимкнено |
+| presence | вимкнено |
## Інтерфейс компонентів v2
-OpenClaw використовує компоненти Discord v2 для підтверджень виконання та маркерів між контекстами. Дії з повідомленнями Discord також можуть приймати `components` для спеціального інтерфейсу (розширений варіант; потребує побудови payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані.
+OpenClaw використовує компоненти Discord v2 для затверджень exec і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького інтерфейсу (розширено; потребує створення 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` ігноруються, коли наявні компоненти v2.
Приклад:
@@ -1017,20 +1017,20 @@ OpenClaw використовує компоненти Discord v2 для під
## Голос
-Discord має дві окремі голосові поверхні: голосові канали реального часу (безперервні розмови) і вкладення голосових повідомлень (формат попереднього перегляду хвильової форми). Gateway підтримує обидва варіанти.
+Discord має дві окремі голосові поверхні: голосові канали **в реальному часі** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду з хвильовою формою). Gateway підтримує обидві.
### Голосові канали
Контрольний список налаштування:
1. Увімкніть Message Content Intent у Discord Developer Portal.
-2. Увімкніть Server Members Intent, коли використовуються списки дозволених ролей/користувачів.
+2. Увімкніть Server Members Intent, коли використовуються allowlist ролей/користувачів.
3. Запросіть бота зі scope `bot` і `applications.commands`.
-4. Надайте дозволи Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі.
+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` для керування сеансами. Команда використовує стандартного агента облікового запису й дотримується тих самих правил allowlist і групової політики, що й інші команди Discord.
```bash
/vc join channel:
@@ -1068,33 +1068,33 @@ Discord має дві окремі голосові поверхні: голос
Примітки:
- `voice.tts` перевизначає `messages.tts` лише для голосового відтворення.
-- `voice.model` перевизначає LLM, який використовується лише для відповідей у голосовому каналі Discord. Залиште це поле незаданим, щоб успадкувати модель маршрутизованого агента.
+- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосових каналах Discord. Залиште його незаданим, щоб успадкувати модель маршрутизованого агента.
- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрибування.
-- Ходи голосової транскрипції визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`).
-- Голос увімкнено за замовчуванням; задайте `channels.discord.voice.enabled=false`, щоб вимкнути голосовий runtime і Gateway intent `GuildVoiceStates`.
-- `channels.discord.intents.voiceStates` може явно перевизначити підписку на intent стану голосу. Залиште це поле незаданим, щоб intent відповідав `voice.enabled`.
+- Ходи голосового транскрипта визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`).
+- Голос увімкнено типово; задайте `channels.discord.voice.enabled=false`, щоб вимкнути голосове середовище виконання та gateway intent `GuildVoiceStates`.
+- `channels.discord.intents.voiceStates` може явно перевизначити підписку на intent голосового стану. Залиште незаданим, щоб intent відповідав `voice.enabled`.
- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються до параметрів приєднання `@discordjs/voice`.
-- Значення за замовчуванням `@discordjs/voice`: `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано.
-- OpenClaw також відстежує збої розшифрування під час отримання й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись до нього після повторюваних збоїв у короткому проміжку часу.
-- Якщо журнали отримання після оновлення знову й знову показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить upstream-виправлення padding з PR discord.js #11449, який закрив issue discord.js #11419.
+- Типові значення `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано.
+- OpenClaw також відстежує збої розшифрування приймання й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись до нього після повторюваних збоїв у короткому вікні.
+- Якщо після оновлення журнали приймання повторно показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить upstream-виправлення padding із PR discord.js #11449, який закрив issue discord.js #11419.
-Конвеєр голосового каналу:
+Пайплайн голосового каналу:
-- Захоплення PCM з Discord перетворюється на тимчасовий WAV-файл.
+- PCM-захоплення Discord перетворюється на тимчасовий WAV-файл.
- `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`.
-- Транскрипція надсилається через звичайний вхідний потік і маршрутизацію Discord.
+- Транскрипт надсилається через ingress і маршрутизацію Discord, тоді як LLM відповіді запускається з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернути текст, оскільки голос Discord відповідає за фінальне відтворення TTS.
- `voice.model`, якщо задано, перевизначає лише LLM відповіді для цього ходу голосового каналу.
-- `voice.tts` об’єднується поверх `messages.tts`; отримане аудіо відтворюється в приєднаному каналі.
+- `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.
+- Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload).
+- Приймається будь-який аудіоформат; OpenClaw конвертує в OGG/Opus за потреби.
```bash
message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true)
@@ -1103,19 +1103,19 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a
## Усунення несправностей
-
+
- увімкніть Message Content Intent
- - увімкніть Server Members Intent, коли ви залежите від визначення користувача/учасника
- - перезапустіть gateway після зміни intent
+ - увімкніть Server Members Intent, коли ви залежите від розпізнавання користувача/учасника
+ - перезапустіть gateway після зміни intents
- перевірте `groupPolicy`
- - перевірте список дозволених guild у `channels.discord.guilds`
- - якщо існує мапа `channels` для guild, дозволені лише перелічені канали
+ - перевірте allowlist guild у `channels.discord.guilds`
+ - якщо існує мапа `channels` guild, дозволені лише перелічені канали
- перевірте поведінку `requireMention` і шаблони згадок
Корисні перевірки:
@@ -1128,29 +1128,29 @@ openclaw logs --follow
-
+
Поширені причини:
- - `groupPolicy="allowlist"` без відповідного списку дозволених guild/каналів
- - `requireMention` налаштовано в неправильному місці (має бути під `channels.discord.guilds` або в записі каналу)
- - відправника заблоковано списком дозволених `users` guild/каналу
+ - `groupPolicy="allowlist"` без відповідного allowlist guild/каналу
+ - `requireMention` налаштовано в неправильному місці (має бути під `channels.discord.guilds` або записом каналу)
+ - відправника заблоковано allowlist `users` guild/каналу
-
+
Типові журнали:
- `Slow listener detected ...`
- `stuck session: sessionKey=agent:...:discord:... state=processing ...`
- Регулятори черги Discord gateway:
+ Регулятори черги Gateway Discord:
- один обліковий запис: `channels.discord.eventQueue.listenerTimeout`
- кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout`
- - це керує лише роботою слухача Discord gateway, а не тривалістю ходу агента
+ - це керує лише роботою слухача Gateway Discord, а не тривалістю ходу агента
- Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень одразу передають роботу далі, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/runtime не завершить або не перерве роботу.
+ Discord не застосовує таймаут, власником якого є канал, до поставлених у чергу ходів агента. Слухачі повідомлень передають керування негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сеансу, доки життєвий цикл сеансу/інструмента/середовища виконання не завершить або не перерве роботу.
```json5
{
@@ -1170,22 +1170,22 @@ openclaw logs --follow
-
- OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартного URL Gateway Discord і в журналах обмежуються за частотою.
+
+ OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до типового URL gateway Discord і обмежуються за частотою в журналах.
- Регулятори тайм-ауту метаданих:
+ Регулятори таймауту метаданих:
- один обліковий запис: `channels.discord.gatewayInfoTimeoutMs`
- кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs`
- - fallback env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
- - за замовчуванням: `30000` (30 секунд), максимум: `120000`
+ - резервне значення env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
+ - типово: `30000` (30 секунд), максимум: `120000`
Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів.
- Якщо ви використовуєте slug-ключі, зіставлення під час виконання все ще може працювати, але probe не може повністю перевірити дозволи.
+ Якщо ви використовуєте ключі slug, зіставлення під час виконання все ще може працювати, але probe не може повністю перевірити дозволи.
@@ -1193,27 +1193,27 @@ openclaw logs --follow
- DM вимкнено: `channels.discord.dm.enabled=false`
- політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`)
- - очікується підтвердження pairing у режимі `pairing`
+ - очікується затвердження pairing у режимі `pairing`
-
- За замовчуванням повідомлення, створені ботами, ігноруються.
+
+ Типово повідомлення, створені ботами, ігноруються.
- Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і списків дозволених, щоб уникнути циклічної поведінки.
- Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота.
+ Якщо ви задаєте `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)
@@ -1228,32 +1228,32 @@ openclaw logs --follow
- політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*`
- команда: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*`
- черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency`
-- метадані gateway: `gatewayInfoTimeoutMs`
+- метадані Gateway: `gatewayInfoTimeoutMs`
- відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
-- доставлення: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
-- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce`
-- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, за замовчуванням `100MB`), `retry`
+- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
+- streaming: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce`
+- медіа/повтор: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry`
- дії: `actions.*`
- presence: `activity`, `status`, `activityType`, `activityUrl`
- UI: `ui.components.accentColor`
-- функції: `threadBindings`, верхньорівневі `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`.
+- Якщо deploy/стан команд застарів, перезапустіть gateway і повторно перевірте через `openclaw channels status --probe`.
## Пов’язане
-
- Прив’яжіть користувача Discord до Gateway.
+
+ Створіть пару між користувачем Discord і Gateway.
- Поведінка групового чату та списку дозволених.
+ Поведінка групового чату та allowlist.
Спрямовуйте вхідні повідомлення до агентів.
@@ -1261,10 +1261,10 @@ openclaw logs --follow
Модель загроз і посилення захисту.
-
+
Зіставляйте гільдії та канали з агентами.
- Поведінка нативних команд.
+ Нативна поведінка команд.