From ef740bbee5c14d4803a0d7b92d030b349a326bf4 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Tue, 28 Apr 2026 18:46:26 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/discord.md | 502 ++++++++++++++++++------------------ 1 file changed, 258 insertions(+), 244 deletions(-) diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index f50bc4949..0a52abe26 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-28T11:03:52Z" + generated_at: "2026-04-28T18:43:59Z" model: gpt-5.5 provider: openai - source_hash: 975b67d27443e5c785a0af26e4537db885368d532bc02a890bfd778544000193 + source_hash: af9ce1f825f47c5945aaaa1a7ae72e13679d298384bc34d3c7a63003b0206a3e source_path: channels/discord.md workflow: 16 --- -Готово до DM і каналів гільдій через офіційний Discord Gateway. +Готово для особистих повідомлень і серверних каналів через офіційний 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 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** (рекомендовано; потрібно для allowlist ролей і зіставлення імен з ID) - - **Presence Intent** (необов’язково; потрібно лише для оновлень присутності) + - **Message Content Intent** (обов'язково) + - **Server Members Intent** (рекомендовано; потрібно для списків дозволених ролей і зіставлення імен з ID) + - **Presence Intent** (необов'язково; потрібно лише для оновлень присутності) @@ -54,19 +54,19 @@ x-i18n: Попри назву, це створює ваш перший токен — нічого не "скидається". - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро знадобиться. + Скопіюйте токен і збережіть його. Це ваш **Bot Token**, і він скоро знадобиться. - - Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на свій сервер. + + Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на свій сервер. - Прокрутіть униз до **OAuth2 URL Generator** і ввімкніть: + Прокрутіть униз до **OAuth2 URL Generator** і увімкніть: - `bot` - `applications.commands` - Нижче з’явиться розділ **Bot Permissions**. Увімкніть щонайменше: + Нижче з'явиться розділ **Bot Permissions**. Увімкніть принаймні: **General Permissions** - Перегляд каналів @@ -75,33 +75,33 @@ x-i18n: - Читання історії повідомлень - Вбудовування посилань - Прикріплення файлів - - Додавання реакцій (необов’язково) + - Додавання реакцій (необов'язково) - Це базовий набір для звичайних текстових каналів. Якщо ви плануєте дописувати в тредах Discord, зокрема у сценаріях форумних або медіаканалів, які створюють або продовжують тред, також увімкніть **Send Messages in Threads**. - Скопіюйте згенерований URL внизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб під’єднатися. Тепер ви маєте бачити свого бота на сервері Discord. + Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в гілках Discord, зокрема у сценаріях форумних або медіаканалів, які створюють або продовжують гілку, також увімкніть **Send Messages in Threads**. + Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте бачити свого бота на сервері Discord. - Повернувшись у застосунок Discord, потрібно ввімкнути режим розробника, щоб копіювати внутрішні ID. + У застосунку Discord потрібно увімкнути режим розробника, щоб копіювати внутрішні ID. - 1. Натисніть **User Settings** (піктограма шестерні поруч з аватаром) → **Advanced** → увімкніть **Developer Mode** - 2. Клацніть правою кнопкою свій **server icon** на бічній панелі → **Copy Server ID** - 3. Клацніть правою кнопкою свій **own avatar** → **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 має дозволяти вашому боту надсилати вам DM. Клацніть правою кнопкою свій **server icon** → **Privacy Settings** → увімкніть **Direct Messages**. + + Щоб сполучення працювало, Discord має дозволяти боту надсилати вам особисті повідомлення. Натисніть правою кнопкою на **піктограмі сервера** → **Privacy Settings** → увімкніть **Direct Messages**. - Це дає змогу учасникам сервера (зокрема ботам) надсилати вам DM. Залиште це ввімкненим, якщо хочете використовувати Discord DM з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути DM після сполучення. + Це дозволяє учасникам сервера (зокрема ботам) надсилати вам особисті повідомлення. Залиште це ввімкненим, якщо хочете використовувати особисті повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише серверні канали, можете вимкнути особисті повідомлення після сполучення. - - Токен вашого бота Discord є секретом (як пароль). Задайте його на машині, де працює OpenClaw, перед тим як писати своєму агенту. + + Токен вашого бота Discord є секретом (як пароль). Задайте його на машині, де запущено OpenClaw, перш ніж писати своєму агенту. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -111,20 +111,20 @@ 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 / config. - > "Я вже задав токен свого бота Discord у конфігурації. Завершіть налаштування Discord з User ID `` і Server ID ``." + > "Я вже задав токен бота Discord у конфігурації. Заверши налаштування Discord з User ID `` і Server ID ``." - + Якщо ви віддаєте перевагу файловій конфігурації, задайте: ```json5 @@ -148,21 +148,21 @@ openclaw gateway DISCORD_BOT_TOKEN=... ``` - Підтримуються plaintext значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). + Підтримуються відкриті значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). - - Зачекайте, доки Gateway працює, а потім надішліть DM своєму боту в Discord. Він відповість кодом сполучення. + + Дочекайтеся запуску gateway, потім напишіть своєму боту в Discord в особисті повідомлення. Він відповість кодом сполучення. - + Надішліть код сполучення своєму агенту в наявному каналі: - > "Схваліть цей код сполучення Discord: ``" + > "Підтвердь цей код сполучення Discord: ``" @@ -176,27 +176,27 @@ openclaw pairing approve discord Коди сполучення спливають через 1 годину. - Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через DM. + Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через особисті повідомлення. -Розв’язання токена враховує обліковий запис. Значення токена в конфігурації мають пріоритет над резервним env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. -Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` на рівні виклику використовується для цього виклику. Це стосується дій надсилання та read/probe-style дій (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису та параметри повторів усе ще беруться з вибраного облікового запису в активному runtime snapshot. +Розв'язання токена враховує обліковий запис. Значення токена в конфігурації мають пріоритет над резервним env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. +Для розширених вихідних викликів (інструмент повідомлень / дії каналу) явний `token` для окремого виклику використовується саме для цього виклику. Це стосується дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політики облікового запису та параметри повторних спроб усе ще беруться з вибраного облікового запису в активному знімку runtime. -## Рекомендовано: налаштуйте робочий простір гільдії +## Рекомендовано: налаштуйте робочий простір сервера -Коли DM запрацюють, ви можете налаштувати свій сервер Discord як повний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Коли особисті повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власний сеанс агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. - - Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в DM. + + Це дозволяє вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в особистих повідомленнях. - - > "Додайте мій Discord Server ID `` до allowlist гільдій" + + > "Додай мій Discord Server ID `` до списку дозволених серверів" @@ -221,17 +221,17 @@ openclaw pairing approve discord - - За замовчуванням ваш агент відповідає в каналах гільдії лише коли його @mentioned. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення. + + За замовчуванням ваш агент відповідає в серверних каналах лише коли його @згадують. Для приватного сервера, ймовірно, ви захочете, щоб він відповідав на кожне повідомлення. - У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно інструментом `message`, тож агент може за замовчуванням спостерігати й дописувати лише тоді, коли вирішить, що відповідь у каналі корисна. + У серверних каналах звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, щоб агент міг за замовчуванням спостерігати й публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. - - > "Дозвольте моєму агенту відповідати на цьому сервері без потреби бути @mentioned" + + > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути @згаданим" - Задайте `requireMention: false` у конфігурації гільдії: + Задайте `requireMention: false` у конфігурації сервера: ```json5 { @@ -254,79 +254,79 @@ openclaw pairing approve discord - - За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в DM-сесіях. Канали гільдії не завантажують MEMORY.md автоматично. + + За замовчуванням довгострокова пам'ять (MEMORY.md) завантажується лише в сеансах особистих повідомлень. Серверні канали не завантажують MEMORY.md автоматично. - - > "Коли я ставлю запитання в каналах Discord, використовуйте memory_search або memory_get, якщо вам потрібен довгостроковий контекст з 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. +- Gateway володіє підключенням Discord. - Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються до Discord. -- Метадані гільдії/каналу Discord додаються до model prompt як недовірений +- Метадані сервера/каналу Discord додаються до промпта моделі як ненадійний контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт - назад, OpenClaw вилучає скопійовані метадані з вихідних відповідей і з - майбутнього replay context. -- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основну сесію агента (`agent:main:main`). -- Канали гільдії є ізольованими ключами сесій (`agent::discord:channel:`). -- Групові DM ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`). -- Вбудовані слеш-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас усе ще несучи `CommandTargetSessionKey` до маршрутизованої сесії розмови. -- Текстова cron/heartbeat доставка оголошень до Discord використовує фінальну - видиму асистенту відповідь один раз. Медіа та структуровані component payloads залишаються - кількома повідомленнями, коли агент випускає кілька deliverable payloads. + назад, 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 components v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. +OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень з payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. Підтримувані блоки: - `text`, `section`, `separator`, `actions`, `media-gallery`, `file` -- Action rows дозволяють до 5 кнопок або одне меню вибору +- Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, списки вибору та форми кілька разів, доки не завершиться їхній строк дії. +За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити кнопкам, спискам вибору й формам використовуватися кілька разів, доки вони не спливуть. -Щоб обмежити, хто може натискати кнопку, задайте `allowedUsers` для цієї кнопки (ідентифікатори користувачів Discord, теги або `*`). Коли це налаштовано, користувачі без збігу отримують ефемерну відмову. +Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли налаштовано, користувачі без збігу отримують ефемерну відмову. -Слеш-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі та сумісного середовища виконання, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і користуватися нею може лише користувач, який її викликав. +Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з розкривними списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і користуватися нею може лише користувач, який її викликав. -Вкладені файли: +Вкладення файлів: - блоки `file` мають указувати на посилання на вкладення (`attachment://`) - Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів @@ -334,7 +334,7 @@ OpenClaw підтримує контейнери Discord components v2 для п Модальні форми: -- Додайте `components.modal` із до 5 полями +- Додайте `components.modal` з до 5 полями - Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` - OpenClaw автоматично додає кнопку запуску @@ -392,20 +392,20 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` -## Керування доступом і маршрутизація +## Контроль доступу й маршрутизація - `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` не задано. @@ -416,7 +416,7 @@ OpenClaw підтримує контейнери Discord components v2 для п - `user:` - згадка `<@id>` - Голі числові ідентифікатори неоднозначні й відхиляються, якщо явно не задано тип цілі користувача/каналу. + Голі числові ID неоднозначні й відхиляються, якщо не надано явний тип цілі користувача/каналу. @@ -427,16 +427,16 @@ OpenClaw підтримує контейнери Discord components v2 для п - `allowlist` - `disabled` - Безпечний базовий варіант, коли існує `channels.discord`, — `allowlist`. + Безпечна базова конфігурація, коли існує `channels.discord`, — це `allowlist`. Поведінка `allowlist`: - - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug приймається) - - необов’язкові списки дозволених відправників: `users` (рекомендовано стабільні ідентифікатори) і `roles` (лише ідентифікатори ролей); якщо налаштовано будь-який із них, відправники дозволяються, коли збігаються з `users` АБО `roles` - - прямий збіг за іменем/тегом вимкнено за замовчуванням; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності - - імена/теги підтримуються для `users`, але ідентифікатори безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменем/тегом - - якщо для гільдії налаштовано `channels`, канали не зі списку забороняються - - якщо гільдія не має блока `channels`, дозволяються всі канали в цій дозволеній гільдії + - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug також приймається) + - необов’язкові списки дозволених відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли збігаються з `users` АБО `roles` + - прямий збіг імен/тегів вимкнено за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності + - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів + - якщо для гільдії налаштовано `channels`, канали поза списком заборонені + - якщо гільдія не має блока `channels`, дозволені всі канали в цій гільдії зі списку дозволених Приклад: @@ -462,12 +462,12 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Якщо ви задаєте лише `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, резервна поведінка під час виконання — `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. + Якщо ви лише задаєте `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, резервна поведінка runtime — `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. - - Повідомлення в гільдіях за замовчуванням пропускаються через шлюз згадок. + + Повідомлення гільдії за замовчуванням проходять через перевірку згадки. Виявлення згадок охоплює: @@ -476,19 +476,19 @@ OpenClaw підтримує контейнери Discord components v2 для п - неявну поведінку відповіді боту в підтримуваних випадках `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`). - `ignoreOtherMentions` необов’язково відкидає повідомлення, що згадують іншого користувача/роль, але не бота (за винятком @everyone/@here). + `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here). Групові DM: - за замовчуванням: ігноруються (`dm.groupEnabled=false`) - - необов’язковий `allowlist` через `dm.groupChannels` (ідентифікатори каналів або slug) + - необов’язковий список дозволених через `dm.groupChannels` (ID каналів або slugs) ### Маршрутизація агентів на основі ролей -Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ідентифікатором ролі. Прив’язки на основі ролей приймають лише ідентифікатори ролей і обчислюються після прив’язок peer або parent-peer та перед прив’язками лише для гільдії. Якщо прив’язка також задає інші поля відповідності (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. +Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише гільдії. Якщо прив’язка також задає інші поля відповідності (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. ```json5 { @@ -512,24 +512,24 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` -## Вбудовані команди та автентифікація команд +## Нативні команди й авторизація команд - `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord. -- Перевизначення для каналу: `channels.discord.commands.native`. -- `commands.native=false` явно очищає раніше зареєстровані вбудовані команди Discord. -- Автентифікація вбудованих команд використовує ті самі списки дозволених і політики Discord, що й звичайна обробка повідомлень. -- Команди все ще можуть бути видимі в інтерфейсі Discord для користувачів без авторизації; виконання все одно застосовує автентифікацію OpenClaw і повертає "не авторизовано". +- Перевизначення для окремого каналу: `channels.discord.commands.native`. +- `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord. +- Авторизація нативних команд використовує ті самі списки дозволених і політики Discord, що й звичайна обробка повідомлень. +- Команди все ще можуть бути видимими в інтерфейсі Discord для користувачів без авторизації; виконання однаково застосовує авторизацію OpenClaw і повертає "not authorized". -Див. [Слеш-команди](/uk/tools/slash-commands), щоб переглянути каталог команд і поведінку. +Див. [Slash-команди](/uk/tools/slash-commands) для каталогу команд і поведінки. -Стандартні налаштування слеш-команд: +Налаштування slash-команд за замовчуванням: - `ephemeral: true` ## Подробиці функцій - + Discord підтримує теги відповіді у виводі агента: - `[[reply_to_current]]` @@ -542,21 +542,21 @@ OpenClaw підтримує контейнери Discord components v2 для п - `all` - `batched` - Примітка: `off` вимикає неявне створення ланцюжків відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються. - `first` завжди додає неявне посилання на вбудовану відповідь до першого вихідного повідомлення Discord за цей хід. - `batched` додає неявне посилання Discord на вбудовану відповідь лише тоді, коли - вхідний хід був пакетною групою з кількох повідомлень після debounce. Це корисно, - коли вам потрібні вбудовані відповіді переважно для неоднозначних сплесків у чатах, а не для кожного + Примітка: `off` вимикає неявне потокове зв’язування відповідей. Явні теги `[[reply_to_*]]` усе ще враховуються. + `first` завжди прикріплює неявне нативне посилання відповіді до першого вихідного повідомлення Discord у ході. + `batched` прикріплює неявне нативне посилання відповіді Discord лише тоді, коли + вхідний хід був debounced-пакетом із кількох повідомлень. Це корисно, + коли ви хочете нативні відповіді переважно для неоднозначних швидких чатів, а не для кожного ходу з одним повідомленням. - Ідентифікатори повідомлень показуються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. + ID повідомлень відображаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. - - OpenClaw може потоково передавати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` відображається на `partial` у Discord; `streamMode` — застарілий псевдонім, який автоматично мігрується. + + OpenClaw може транслювати чернеткові відповіді, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` відображається на `partial` у Discord; `streamMode` — застарілий alias і мігрується автоматично. - За замовчуванням лишається `off`, бо редагування попереднього перегляду в Discord швидко впираються в обмеження частоти, коли кілька ботів або Gateway спільно використовують один обліковий запис. + За замовчуванням лишається `off`, бо редагування попереднього перегляду Discord швидко впираються в rate limits, коли кілька ботів або gateways спільно використовують обліковий запис. ```json5 { @@ -573,12 +573,12 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. - - `block` випускає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). - - Медіа, помилки та фінальні відповіді з явною відповіддю скасовують очікувані редагування попереднього перегляду. + - `partial` редагує одне повідомлення попереднього перегляду в міру надходження tokens. + - `block` видає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). + - Медіа, помилки й фінальні явні відповіді скасовують очікувані редагування попереднього перегляду. - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. - Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потокову передачу `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної потокової передачі. + Потокове передавання попереднього перегляду підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потокове передавання `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання. @@ -589,32 +589,32 @@ OpenClaw підтримує контейнери Discord components v2 для п - резервний варіант: `messages.groupChat.historyLimit` - `0` вимикає - Елементи керування історією DM: + Керування історією DM: - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` Поведінка потоків: - - Потоки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. - - Сеанси потоків успадковують вибір `/model` рівня сеансу батьківського каналу як резервний варіант лише для моделі; локальні для потоку вибори `/model` усе одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо успадкування транскрипту не ввімкнено. - - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових автоматичних потоків заповнення з батьківського транскрипту. Перевизначення для облікового запису розміщені в `channels.discord.accounts..thread.inheritParent`. - - Реакції інструментів повідомлень можуть розв’язувати цілі DM `user:`. + - Потоки Discord маршрутизуються як сесії каналу й успадковують конфігурацію батьківського каналу, якщо її не перевизначено. + - Сесії потоків успадковують вибір `/model` рівня сесії батьківського каналу як резервний варіант лише моделі; локальні для потоку вибори `/model` усе ще мають пріоритет, а історія transcript батьківського каналу не копіюється, якщо не ввімкнено успадкування transcript. + - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових автоматичних потоків початкове наповнення з батьківського transcript. Перевизначення для окремих облікових записів розміщені в `channels.discord.accounts..thread.inheritParent`. + - Реакції інструмента повідомлень можуть вирішувати DM-цілі `user:`. - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді. - Теми каналів впроваджуються як **ненадійний** контекст. Списки дозволених визначають, хто може запускати агента, але не є повною межею редагування додаткового контексту. + Теми каналів вставляються як **ненадійний** контекст. Списки дозволених визначають, хто може запускати агента, а не є повною межею редагування додаткового контексту. - - Discord може прив’язати потік до цілі сеансу, щоб подальші повідомлення в цьому потоці продовжували маршрутизуватися до того самого сеансу (зокрема сеансів субагентів). + + Discord може прив’язати потік до цілі сесії, щоб подальші повідомлення в цьому потоці продовжували маршрутизуватися до тієї самої сесії (включно із сесіями subagent). Команди: - - `/focus ` прив’язати поточний/новий потік до цілі субагента/сеансу - - `/unfocus` видалити поточну прив’язку потоку + - `/focus ` прив’язати поточний/новий потік до цілі subagent/сесії + - `/unfocus` видалити прив’язку поточного потоку - `/agents` показати активні запуски та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне зняття фокуса через неактивність для сфокусованих прив’язок + - `/session idle ` переглянути/оновити автоматичний unfocus через неактивність для сфокусованих прив’язок - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок Конфігурація: @@ -649,11 +649,11 @@ OpenClaw підтримує контейнери Discord components v2 для п - `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. Шлях конфігурації: @@ -710,35 +710,35 @@ OpenClaw підтримує контейнери Discord components v2 для п Примітки: - - `/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 Agents](/uk/tools/acp-agents). - - Режим сповіщень про реакції для кожної гільдії: + + Режим сповіщень про реакції для окремої гільдії: - `off` - `own` (типово) - `all` - `allowlist` (використовує `guilds..users`) - Події реакцій перетворюються на системні події та додаються до маршрутизованої Discord-сесії. + Події реакцій перетворюються на системні події та додаються до маршрутизованого сеансу Discord. - - `ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення. + + `ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок визначення: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - запасний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") + - резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: @@ -747,10 +747,10 @@ OpenClaw підтримує контейнери Discord components v2 для п - - Записи конфігурації, ініційовані каналом, увімкнені типово. + + Записи конфігурації, ініційовані каналом, увімкнено за замовчуванням. - Це впливає на потоки `/config set|unset` (коли командні функції увімкнені). + Це впливає на потоки `/config set|unset` (коли функції команд увімкнено). Вимкнення: @@ -766,8 +766,8 @@ OpenClaw підтримує контейнери Discord components v2 для п - - Маршрутизуйте трафік Discord gateway WebSocket і стартові REST-запити (ID застосунку + визначення allowlist) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. + + Спрямовуйте WebSocket-трафік Discord Gateway і стартові REST-запити пошуку (ідентифікатор застосунку + визначення списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. ```json5 { @@ -797,8 +797,8 @@ OpenClaw підтримує контейнери Discord components v2 для п - - Увімкніть визначення PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи: + + Увімкніть визначення PluralKit, щоб зіставляти проксовані повідомлення з ідентичністю учасника системи: ```json5 { @@ -815,14 +815,14 @@ OpenClaw підтримує контейнери Discord components v2 для п Примітки: - - allowlists можуть використовувати `pk:` - - відображувані імена учасників зіставляються за name/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошуки використовують початковий ID повідомлення й обмежені часовим вікном - - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо не задано `allowBots=true` + - списки дозволених можуть використовувати `pk:` + - відображувані імена учасників зіставляються за назвою/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` + - пошуки використовують початковий ідентифікатор повідомлення та обмежені часовим вікном + - якщо пошук не вдається, проксовані повідомлення вважаються повідомленнями бота та відкидаються, якщо `allowBots=true` не задано - + Оновлення присутності застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте автоматичну присутність. Приклад лише зі статусом: @@ -850,7 +850,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Приклад стримінгу: + Приклад трансляції: ```json5 { @@ -867,13 +867,13 @@ OpenClaw підтримує контейнери Discord components v2 для п Мапа типів активності: - 0: Грає - - 1: Стримить (потребує `activityUrl`) + - 1: Транслює (потребує `activityUrl`) - 2: Слухає - 3: Дивиться - 4: Користувацька (використовує текст активності як стан статусу; emoji необов’язковий) - 5: Змагається - Приклад автоматичної присутності (сигнал працездатності runtime): + Приклад автоматичної присутності (сигнал стану runtime): ```json5 { @@ -898,8 +898,8 @@ OpenClaw підтримує контейнери Discord components v2 для п - - Discord підтримує обробку схвалень через кнопки в DM і може додатково публікувати запити на схвалення у вихідному каналі. + + Discord підтримує обробку схвалень через кнопки в особистих повідомленнях і може необов’язково публікувати запити на схвалення у вихідному каналі. Шлях конфігурації: @@ -908,16 +908,16 @@ OpenClaw підтримує контейнери Discord components v2 для п - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord автоматично вмикає нативні exec-схвалення, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного схвалювача: або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить exec-схвалювачів із `allowFrom` каналу, застарілого `dm.allowFrom` або direct-message `defaultTo`. Задайте `enabled: false`, щоб явно вимкнути Discord як нативний клієнт схвалень. + Discord автоматично вмикає нативні схвалення виконання, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного схвалювача, або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить схвалювачів виконання з `allowFrom` каналу, застарілого `dm.allowFrom` або `defaultTo` для особистих повідомлень. Задайте `enabled: false`, щоб явно вимкнути Discord як нативний клієнт схвалень. - Коли `target` дорівнює `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені схвалювачі можуть використовувати кнопки; інші користувачі отримують ephemeral-відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо вивести з ключа сесії, OpenClaw повертається до доставки в DM. + Коли `target` має значення `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені схвалювачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тож вмикайте доставку в канал лише в довірених каналах. Якщо ідентифікатор каналу неможливо вивести з ключа сеансу, OpenClaw повертається до доставки в особисті повідомлення. - Discord також відображає спільні кнопки схвалення, які використовуються іншими чат-каналами. Нативний адаптер Discord переважно додає маршрутизацію DM для схвалювачів і розсилання в канали. + Discord також відображає спільні кнопки схвалення, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію особистих повідомлень схвалювачам і розсилання в канали. Коли ці кнопки наявні, вони є основним UX схвалення; OpenClaw - має включати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє, - що чат-схвалення недоступні або ручне схвалення є єдиним шляхом. + має додавати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє, + що схвалення в чаті недоступні або ручне схвалення є єдиним шляхом. - Автентифікація Gateway і визначення схвалень дотримуються спільного контракту клієнта Gateway (`plugin:` IDs визначаються через `plugin.approval.resolve`; інші IDs через `exec.approval.resolve`). Типово схвалення спливають через 30 хвилин. + Автентифікація Gateway і визначення схвалень дотримуються спільного контракту клієнта Gateway (`plugin:` IDs визначаються через `plugin.approval.resolve`; інші IDs через `exec.approval.resolve`). За замовчуванням схвалення спливають через 30 хвилин. Див. [Exec approvals](/uk/tools/exec-approvals). @@ -935,26 +935,26 @@ OpenClaw підтримує контейнери Discord components v2 для п - модерація: `timeout`, `kick`, `ban` - присутність: `setPresence` -Дія `event-create` приймає необов’язковий параметр `image` (URL або локальний шлях до файлу), щоб задати обкладинку запланованої події. +Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб задати обкладинку запланованої події. Шлюзи дій розташовані в `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 | вимкнено | -## UI Components v2 +## Інтерфейс Components v2 -OpenClaw використовує Discord components v2 для exec-схвалень і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького UI (розширено; потребує побудови component payload через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. +OpenClaw використовує компоненти Discord v2 для схвалень виконання та маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького інтерфейсу (розширене використання; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. - `channels.discord.ui.components.accentColor` задає акцентний колір, який використовують контейнери компонентів Discord (hex). - Задайте для окремого облікового запису через `channels.discord.accounts..ui.components.accentColor`. -- `embeds` ігноруються, коли наявні components v2. +- `embeds` ігноруються, коли наявні компоненти v2. Приклад: @@ -974,20 +974,20 @@ OpenClaw використовує Discord components v2 для exec-схвале ## Голос -Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвилі). Gateway підтримує обидві. +Discord має дві окремі голосові поверхні: голосові канали в реальному часі (безперервні розмови) і вкладення голосових повідомлень (формат попереднього перегляду хвилі). Gateway підтримує обидві. ### Голосові канали Контрольний список налаштування: 1. Увімкніть Message Content Intent у Discord Developer Portal. -2. Увімкніть Server Members Intent, коли використовуються allowlists ролей/користувачів. -3. Запросіть бота зі scopes `bot` і `applications.commands`. -4. Надайте Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі. +2. Увімкніть Server Members Intent, коли використовуються списки дозволених ролей/користувачів. +3. Запросіть бота зі scope `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`, щоб керувати сесіями. Команда використовує типового агента облікового запису й дотримується тих самих правил allowlist і групової політики, що й інші команди Discord. +Використовуйте `/vc join|leave|status` для керування сеансами. Команда використовує типового агента облікового запису та дотримується тих самих правил списків дозволених і групової політики, що й інші команди Discord. ```bash /vc join channel: @@ -1025,32 +1025,33 @@ Discord має дві окремі голосові поверхні: realtime * Примітки: - `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`, щоб вимкнути його. +- `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` містить виправлення доповнення з upstream із PR discord.js #11449, яке закрило issue discord.js #11419. +- Типові значення `@discordjs/voice`: `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано. +- OpenClaw також відстежує збої розшифрування під час приймання й автоматично відновлюється, виходячи з голосового каналу та приєднуючись до нього знову після повторних збоїв у короткому часовому вікні. +- Якщо після оновлення журнали приймання неодноразово показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить виправлення padding з upstream із PR discord.js #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. +- Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). +- Приймається будь-який аудіоформат; OpenClaw конвертує в OGG/Opus за потреби. ```bash message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true) @@ -1059,7 +1060,7 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Усунення несправностей - + - увімкніть Message Content Intent - увімкніть Server Members Intent, коли ви залежите від визначення користувача/учасника @@ -1067,11 +1068,11 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a - + - перевірте `groupPolicy` - перевірте allowlist guild у `channels.discord.guilds` - - якщо існує мапа guild `channels`, дозволені лише перелічені канали + - якщо існує мапа `channels` для guild, дозволені лише перелічені канали - перевірте поведінку `requireMention` і шаблони згадок Корисні перевірки: @@ -1084,16 +1085,16 @@ openclaw logs --follow - + Поширені причини: - `groupPolicy="allowlist"` без відповідного allowlist guild/каналу - - `requireMention` налаштовано не в тому місці (має бути в `channels.discord.guilds` або записі каналу) - - відправника заблоковано allowlist `users` для guild/каналу + - `requireMention` налаштовано в неправильному місці (має бути під `channels.discord.guilds` або записом каналу) + - відправника заблоковано allowlist `users` guild/каналу - + Типові журнали: @@ -1101,16 +1102,16 @@ openclaw logs --follow - `Slow listener detected ...` - `discord inbound worker timed out after ...` - Регулятор бюджету слухача: + Перемикач бюджету слухача: - один обліковий запис: `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,42 +1135,54 @@ openclaw logs --follow ``` Використовуйте `eventQueue.listenerTimeout` для повільного налаштування слухача, а `inboundWorker.runTimeoutMs` - лише якщо хочете окремий запобіжний клапан для поставлених у чергу ходів агента. + лише якщо потрібен окремий запобіжний клапан для поставлених у чергу ходів агента. - + + OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до типової URL-адреси Gateway Discord і обмежуються за частотою в журналах. + + Перемикачі тайм-ауту метаданих: + + - один обліковий запис: `channels.discord.gatewayInfoTimeoutMs` + - кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs` + - резервне env-значення, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` + - типово: `30000` (30 секунд), максимум: `120000` + + + + Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів. - Якщо ви використовуєте ключі slug, зіставлення під час виконання все ще може працювати, але probe не може повністю перевірити дозволи. + Якщо ви використовуєте slug-ключі, зіставлення під час виконання все ще може працювати, але probe не може повністю перевірити дозволи. - + - DM вимкнено: `channels.discord.dm.enabled=false` - - політика DM вимкнена: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) - - очікується схвалення pairing у режимі `pairing` + - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) + - очікується схвалення сполучення в режимі `pairing` - - За замовчуванням повідомлення, створені ботами, ігноруються. + + Типово повідомлення, створені ботами, ігноруються. Якщо ви задаєте `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) @@ -1178,46 +1191,47 @@ 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` -- inbound worker: `inboundWorker.runTimeoutMs` +- вхідний worker: `inboundWorker.runTimeoutMs` +- метадані Gateway: `gatewayInfoTimeoutMs` - відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` -- доставлення: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` +- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` - streaming: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` -- медіа/повтор: `mediaMaxMb` (обмежує вихідні завантаження Discord, за замовчуванням `100MB`), `retry` +- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry` - дії: `actions.*` - присутність: `activity`, `status`, `activityType`, `activityUrl` - UI: `ui.components.accentColor` -- функції: `threadBindings`, верхньорівневий `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` +- функції: `threadBindings`, top-level `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. + + Сполучіть користувача Discord із Gateway. - - Поведінка групового чату та allowlist. + + Поведінка групового чату й allowlist. - + Маршрутизуйте вхідні повідомлення до агентів. - + Модель загроз і посилення захисту. - + Зіставляйте guilds і канали з агентами.