diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index 2ca82588c..4b56ecb03 100644 --- a/docs/uk/channels/discord.md +++ b/docs/uk/channels/discord.md @@ -1,72 +1,72 @@ --- read_when: - Робота над функціями каналу Discord -summary: Статус підтримки, можливості та конфігурація бота Discord +summary: Стан підтримки бота Discord, можливості та конфігурація title: Discord x-i18n: - generated_at: "2026-04-29T12:05:58Z" + generated_at: "2026-04-29T13:26:32Z" model: gpt-5.5 provider: openai - source_hash: 8ae0b2fc79f266bc830c8c8725cb7a1bb1b33d89566c63a80362c7ecb2c863fb + source_hash: a7ea64c3de512b9e194630c819a8183aa4574f86526c6dd205181fc486df8ac1 source_path: channels/discord.md workflow: 16 --- -Готово для особистих повідомлень і каналів гільдій через офіційний Discord gateway. +Готово до DM і каналів гільдій через офіційний Discord gateway. - - Особисті повідомлення Discord за замовчуванням використовують режим сполучення. + + Discord DM за замовчуванням переходять у режим сполучення. - - Власна поведінка команд і каталог команд. + + Нативна поведінка команд і каталог команд. - - Діагностика між каналами та процес відновлення. + + Міжканальна діагностика та потік відновлення. ## Швидке налаштування -Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і спарувати його з 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". - Натисніть **Bot** на бічній панелі. Установіть **Username** на ім’я, яким ви називаєте свого агента OpenClaw. + Натисніть **Bot** на бічній панелі. Установіть **Username** на ім'я, яким ви називаєте свого агента OpenClaw. - + Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і ввімкніть: - - **Message Content Intent** (обов’язково) - - **Server Members Intent** (рекомендовано; потрібно для списків дозволених ролей і зіставлення імен з ID) - - **Presence Intent** (необов’язково; потрібно лише для оновлень присутності) + - **Message Content Intent** (обов'язково) + - **Server Members Intent** (рекомендовано; обов'язково для списків дозволених ролей і зіставлення імен з ID) + - **Presence Intent** (необов'язково; потрібно лише для оновлень присутності) - + Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**. Попри назву, це створює ваш перший токен — нічого не "скидається". - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро вам знадобиться. + Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він незабаром вам знадобиться. - - Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на свій сервер. + + Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на ваш сервер. Прокрутіть униз до **OAuth2 URL Generator** і ввімкніть: - `bot` - `applications.commands` - Нижче з’явиться розділ **Bot Permissions**. Увімкніть щонайменше: + Нижче з'явиться розділ **Bot Permissions**. Увімкніть принаймні: **General Permissions** - View Channels @@ -75,33 +75,33 @@ x-i18n: - Read Message History - Embed Links - Attach Files - - Add Reactions (необов’язково) + - Add Reactions (необов'язково) - Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах Discord, зокрема у сценаріях форумних або медіаканалів, які створюють або продовжують тред, також увімкніть **Send Messages in Threads**. - Скопіюйте згенерований URL внизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте бачити свого бота на сервері Discord. + Це базовий набір для звичайних текстових каналів. Якщо плануєте публікувати в Discord threads, зокрема в робочих потоках форумних або медіаканалів, які створюють або продовжують thread, також увімкніть **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 має дозволити вашому боту надсилати вам особисті повідомлення. Клацніть правою кнопкою миші **піктограму сервера** → **Privacy Settings** → увімкніть **Direct Messages**. + + Щоб сполучення працювало, Discord має дозволити вашому боту надсилати вам DM. Клацніть правою кнопкою **піктограму сервера** → **Privacy Settings** → увімкніть **Direct Messages**. - Це дозволяє учасникам сервера (зокрема ботам) надсилати вам особисті повідомлення. Залиште це ввімкненим, якщо хочете використовувати особисті повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути особисті повідомлення після сполучення. + Це дозволяє учасникам сервера (включно з ботами) надсилати вам DM. Залиште це ввімкненим, якщо хочете використовувати Discord DM з OpenClaw. Якщо плануєте використовувати лише канали гільдій, можете вимкнути DM після сполучення. - - Токен вашого бота Discord є секретом (як пароль). Установіть його на машині, де запущено OpenClaw, перш ніж писати агенту. + + Токен вашого Discord-бота є секретом (як пароль). Задайте його на машині, де працює OpenClaw, перш ніж писати своєму агенту. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -111,21 +111,21 @@ openclaw config set channels.discord.enabled true --strict-json openclaw gateway ``` - Якщо OpenClaw уже працює як фонова служба, перезапустіть його через застосунок OpenClaw для Mac або зупинивши й повторно запустивши процес `openclaw gateway run`. - Для інсталяцій керованої служби запустіть `openclaw gateway install` з оболонки, де наявний `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб служба могла розв’язати env SecretRef після перезапуску. + Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через застосунок OpenClaw Mac або зупинивши й повторно запустивши процес `openclaw gateway run`. + Для встановлень керованого сервісу запустіть `openclaw gateway install` з оболонки, де присутній `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв'язати env SecretRef після перезапуску. - + - - Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому. Якщо Discord є вашим першим каналом, натомість використайте вкладку CLI / config. + + Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому. Якщо Discord є вашим першим каналом, скористайтеся вкладкою CLI / config. - > "Я вже встановив токен свого бота Discord у конфігурації. Завершіть налаштування Discord з User ID `` і Server ID ``." + > "Я вже задав свій токен Discord-бота в конфігурації. Заверши налаштування Discord із User ID `` і Server ID ``." - Якщо ви віддаєте перевагу файловій конфігурації, установіть: + Якщо ви віддаєте перевагу файловій конфігурації, задайте: ```json5 { @@ -142,27 +142,27 @@ openclaw gateway } ``` - Резерв env для стандартного облікового запису: + Env fallback для облікового запису за замовчуванням: ```bash DISCORD_BOT_TOKEN=... ``` - Підтримуються відкриті значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). + Підтримуються plaintext-значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). - - Дочекайтеся запуску gateway, а потім надішліть боту особисте повідомлення в Discord. Він відповість кодом сполучення. + + Зачекайте, доки gateway запрацює, а потім надішліть DM своєму боту в Discord. Він відповість кодом сполучення. - + Надішліть код сполучення своєму агенту в наявному каналі: - > "Схвали цей код сполучення Discord: ``" + > "Підтвердь цей код сполучення Discord: ``" @@ -176,30 +176,30 @@ openclaw pairing approve discord Коди сполучення спливають через 1 годину. - Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через особисті повідомлення. + Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через DM. -Розв’язання токена враховує обліковий запис. Значення токена з конфігурації мають пріоритет над резервом env. `DISCORD_BOT_TOKEN` використовується лише для стандартного облікового запису. -Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один монітор gateway для цього токена. Токен із конфігурації має пріоритет над стандартним резервом env; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис повідомляється як вимкнений. -Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій send і read/probe-style (наприклад, 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-знімку. ## Рекомендовано: налаштуйте робочий простір гільдії -Коли особисті повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власний сеанс агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Коли DM запрацюють, ви можете налаштувати свій сервер Discord як повний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. - - Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в особистих повідомленнях. + + Це дає змогу вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в DM. - + > "Додай мій Discord Server ID `` до списку дозволених гільдій" - + ```json5 { @@ -222,17 +222,17 @@ openclaw pairing approve discord - - За замовчуванням ваш агент відповідає в каналах гільдії лише тоді, коли його @згадали. Для приватного сервера ви, ймовірно, захочете, щоб він відповідав на кожне повідомлення. + + За замовчуванням ваш агент відповідає в каналах гільдії лише тоді, коли його згадано через @mention. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення. - У каналах гільдії звичайні фінальні відповіді помічника за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно інструментом `message`, щоб агент за замовчуванням міг залишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. + У каналах гільдії звичайні фінальні відповіді помічника за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно інструментом `message`, тож агент може за замовчуванням залишатися в режимі спостереження й публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. - - > "Дозволь моєму агенту відповідати на цьому сервері без необхідності @згадки" + + > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути @mentioned" - - Установіть `requireMention: false` у конфігурації гільдії: + + Задайте `requireMention: false` у конфігурації гільдії: ```json5 { @@ -248,72 +248,72 @@ openclaw pairing approve discord } ``` - Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат, установіть `messages.groupChat.visibleReplies: "automatic"`. + Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат, задайте `messages.groupChat.visibleReplies: "automatic"`. - - За замовчуванням довготривала пам’ять (MEMORY.md) завантажується лише в сеансах особистих повідомлень. Канали гільдії не завантажують MEMORY.md автоматично. + + За замовчуванням довгострокова пам'ять (MEMORY.md) завантажується лише в DM-сесіях. Канали гільдії не завантажують 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 додаються до підказки моделі як ненадійний контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт - назад, OpenClaw видаляє скопійовані метадані з вихідних відповідей і з - майбутнього контексту відтворення. -- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують головний сеанс агента (`agent:main:main`). -- Канали гільдії є ізольованими ключами сеансів (`agent::discord:channel:`). -- Групові особисті повідомлення ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`). -- Власні slash-команди виконуються в ізольованих командних сеансах (`agent::discord:slash:`), водночас усе ще несучи `CommandTargetSessionKey` до маршрутизованого сеансу розмови. -- Доставка текстових оголошень cron/heartbeat до Discord використовує остаточну - видиму помічнику відповідь один раз. Медіа та структуровані компонентні payloads залишаються - багатоповідомними, коли агент випускає кілька придатних до доставки payloads. + назад, OpenClaw вилучає скопійовані метадані з вихідних відповідей і з + майбутнього контексту повторного відтворення. +- За замовчуванням (`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-ів, придатних для доставки. ## Форумні канали -Форумні та медіаканали Discord приймають лише публікації в тредах. OpenClaw підтримує два способи їх створення: +Форумні та медіаканали Discord приймають лише дописи thread. OpenClaw підтримує два способи їх створення: -- Надішліть повідомлення батьківському форуму (`channel:`), щоб автоматично створити тред. Назвою треду стане перший непорожній рядок вашого повідомлення. -- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для форумних каналів. +- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити thread. Заголовок thread використовує перший непорожній рядок вашого повідомлення. +- Використайте `openclaw message thread create`, щоб створити thread напряму. Не передавайте `--message-id` для форумних каналів. -Приклад: надіслати до батьківського форуму, щоб створити тред +Приклад: надіслати до батьківського форуму, щоб створити thread ```bash openclaw message send --channel discord --target channel: \ --message "Topic title\nBody of the post" ``` -Приклад: явно створити форумний тред +Приклад: явно створити форумний thread ```bash openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самого треду (`channel:`). +Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самого thread (`channel:`). ## Інтерактивні компоненти -OpenClaw підтримує контейнери Discord components v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. +OpenClaw підтримує контейнери Discord components v2 для повідомлень агентів. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та відповідають наявним налаштуванням Discord `replyToMode`. Підтримувані блоки: @@ -321,21 +321,21 @@ OpenClaw підтримує контейнери Discord components v2 для п - Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням components призначені для одноразового використання. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, меню вибору та форм, доки не завершиться строк їх дії. +За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, елементів вибору та форм до завершення їхнього строку дії. -Щоб обмежити, хто може натискати кнопку, установіть `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли це налаштовано, користувачі, які не відповідають умовам, отримують ефемерну відмову. +Щоб обмежити, хто може натискати кнопку, установіть `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли це налаштовано, користувачі без збігу отримують тимчасову відмову. -Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і використовувати її може лише користувач, який її викликав. +Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з розкривними списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору тимчасова, і використовувати її може лише користувач, який її викликав. Вкладення файлів: -- Блоки `file` мають указувати на посилання на вкладення (`attachment://`) -- Надайте вкладення через `media`/`path`/`filePath` (один файл); для кількох файлів використовуйте `media-gallery` -- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням на вкладення +- Блоки `file` мають указувати на посилання вкладення (`attachment://`) +- Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів +- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням вкладення Модальні форми: -- Додайте `components.modal` з до 5 полями +- Додайте `components.modal` із до 5 полями - Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` - OpenClaw автоматично додає кнопку запуску @@ -397,20 +397,20 @@ Slash-команди `/model` і `/models` відкривають інтерак - `channels.discord.dmPolicy` керує доступом до DM (застаріле: `channels.discord.dm.policy`): + `channels.discord.dmPolicy` керує доступом DM (застаріле: `channels.discord.dm.policy`): - `pairing` (за замовчуванням) - `allowlist` - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`; застаріле: `channels.discord.dm.allowFrom`) - `disabled` - Якщо політика DM не відкрита, невідомі користувачі блокуються (або отримують запит на pairing у режимі `pairing`). + Якщо політика DM не відкрита, невідомих користувачів блокують (або пропонують сполучення в режимі `pairing`). Пріоритет для кількох облікових записів: - `channels.discord.accounts.default.allowFrom` застосовується лише до облікового запису `default`. - Для одного облікового запису `allowFrom` має пріоритет над застарілим `dm.allowFrom`. - - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застарілий `dm.allowFrom` не задані. + - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застарілий `dm.allowFrom` не встановлено. - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`. Формат цілі DM для доставки: @@ -418,7 +418,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - `user:` - згадка `<@id>` - Голі числові ID зазвичай розпізнаються як ID каналів, коли активне значення каналу за замовчуванням, але ID, перелічені в ефективному DM `allowFrom` облікового запису, обробляються як цілі користувацьких DM для сумісності. + Голі числові ID зазвичай розпізнаються як ID каналів, коли активне значення каналу за замовчуванням, але ID, перелічені в ефективному DM `allowFrom` облікового запису, для сумісності вважаються цілями користувацьких DM. @@ -429,16 +429,16 @@ Slash-команди `/model` і `/models` відкривають інтерак - `allowlist` - `disabled` - Безпечний базовий режим, коли існує `channels.discord`, — це `allowlist`. + Безпечне базове значення, коли існує `channels.discord`, — `allowlist`. Поведінка `allowlist`: - - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug також приймається) - - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволяються, коли вони відповідають `users` АБО `roles` - - пряме зіставлення імен/тегів вимкнене за замовчуванням; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності - - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменами/тегами - - якщо для гільдії налаштовано `channels`, канали, не зазначені в списку, забороняються - - якщо гільдія не має блоку `channels`, дозволяються всі канали в цій гільдії з allowlist + - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug приймається) + - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles` + - пряме зіставлення імен/тегів вимкнене за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності + - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів + - якщо в гільдії налаштовано `channels`, канали не зі списку забороняються + - якщо в гільдії немає блока `channels`, дозволені всі канали в цій allowlisted гільдії Приклад: @@ -464,21 +464,21 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Якщо ви лише задаєте `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, fallback runtime — `groupPolicy="allowlist"` (з попередженням у логах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. + Якщо ви встановили лише `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, резервне значення runtime — `groupPolicy="allowlist"` (із попередженням у логах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. Повідомлення гільдій за замовчуванням пропускаються через перевірку згадок. - Виявлення згадок включає: + Виявлення згадок охоплює: - явну згадку бота - - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`) + - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`) - неявну поведінку відповіді боту в підтримуваних випадках `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`). - `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here). + `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (окрім @everyone/@here). Групові DM: @@ -490,7 +490,7 @@ Slash-команди `/model` і `/models` відкривають інтерак ### Маршрутизація агентів на основі ролей -Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і обчислюються після прив’язок peer або parent-peer та перед прив’язками лише для гільдії. Якщо прив’язка також задає інші поля зіставлення (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. +Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише для гільдії. Якщо прив’язка також задає інші поля збігу (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. ```json5 { @@ -514,17 +514,17 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` -## Нативні команди та автентифікація команд +## Нативні команди та авторизація команд -- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord. -- Перевизначення для окремого каналу: `channels.discord.commands.native`. +- `commands.native` за замовчуванням має значення `"auto"` і ввімкнене для Discord. +- Перевизначення для каналу: `channels.discord.commands.native`. - `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord. -- Автентифікація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень. -- Команди все ще можуть бути видимі в UI Discord для користувачів, які не авторизовані; виконання все одно застосовує автентифікацію OpenClaw і повертає "not authorized". +- Авторизація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень. +- Команди все ще можуть бути видимі в UI Discord для користувачів без авторизації; виконання все одно застосовує авторизацію OpenClaw і повертає "не авторизовано". Див. [Slash-команди](/uk/tools/slash-commands) для каталогу команд і поведінки. -Налаштування slash-команд за замовчуванням: +Стандартні налаштування slash-команд: - `ephemeral: true` @@ -537,26 +537,26 @@ Slash-команди `/model` і `/models` відкривають інтерак - `[[reply_to_current]]` - `[[reply_to:]]` - Керується через `channels.discord.replyToMode`: + Керується `channels.discord.replyToMode`: - `off` (за замовчуванням) - `first` - `all` - `batched` - Примітка: `off` вимикає неявне створення ланцюжків відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються. - `first` завжди додає неявне посилання на нативну відповідь до першого вихідного повідомлення Discord у межах ходу. - `batched` додає неявне посилання Discord на нативну відповідь лише тоді, коли + Примітка: `off` вимикає неявне створення ланцюжків відповідей. Явні теги `[[reply_to_*]]` все одно враховуються. + `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord для ходу. + `batched` додає неявне посилання нативної відповіді Discord лише тоді, коли вхідний хід був debounced-пакетом із кількох повідомлень. Це корисно, - коли потрібні нативні відповіді переважно для неоднозначних швидких чатів, а не для кожного + коли ви хочете нативні відповіді переважно для неоднозначних швидких чатів, а не для кожного ходу з одним повідомленням. - ID повідомлень відображаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. + 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` — застарілий псевдонім, який автоматично мігрується. За замовчуванням лишається `off`, бо редагування попереднього перегляду Discord швидко впираються в rate limits, коли кілька ботів або Gateway спільно використовують один обліковий запис. @@ -576,11 +576,11 @@ Slash-команди `/model` і `/models` відкривають інтерак ``` - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. - - `block` надсилає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). - - Media, помилка та фінальні відповіді з явним посиланням скасовують очікувані редагування попереднього перегляду. - - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. + - `block` виводить фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). + - Медіа, помилки та фінальні повідомлення з явною відповіддю скасовують очікувані редагування попереднього перегляду. + - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи повторно використовують оновлення інструментів/прогресу повідомлення попереднього перегляду. - Потоковий попередній перегляд підтримує лише текст; відповіді з media повертаються до звичайної доставки. Коли потоковий режим `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної трансляції. + Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потоковий режим `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної трансляції. @@ -588,7 +588,7 @@ Slash-команди `/model` і `/models` відкривають інтерак Контекст історії гільдії: - `channels.discord.historyLimit` за замовчуванням `20` - - fallback: `messages.groupChat.historyLimit` + - резервне значення: `messages.groupChat.historyLimit` - `0` вимикає Керування історією DM: @@ -598,25 +598,25 @@ Slash-команди `/model` і `/models` відкривають інтерак Поведінка потоків: - - Потоки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. - - Сеанси потоків успадковують вибір `/model` на рівні сеансу батьківського каналу як fallback лише для моделі; локальні для потоку вибори `/model` усе одно мають пріоритет, а історія transcript батьківського каналу не копіюється, якщо не ввімкнено успадкування transcript. - - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових auto-threads початкове заповнення з батьківського transcript. Перевизначення для окремого облікового запису розташовані в `channels.discord.accounts..thread.inheritParent`. + - Потоки Discord маршрутизуються як сесії каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. + - Сесії потоків успадковують вибір `/model` рівня сесії батьківського каналу як резервне значення лише моделі; локальні для потоку вибори `/model` усе одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо не ввімкнено успадкування транскрипту. + - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових автоматичних потоків початкове заповнення з батьківського транскрипту. Перевизначення для облікового запису розташовані в `channels.discord.accounts..thread.inheritParent`. - Реакції інструмента повідомлень можуть розпізнавати цілі DM `user:`. - - `guilds..channels..requireMention: false` зберігається під час fallback активації на етапі відповіді. + - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді. - Теми каналів вставляються як **недовірений** контекст. Allowlists обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту. + Теми каналів вставляються як **ненадійний** контекст. Allowlists обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту. - - Discord може прив’язати потік до цілі сеансу, щоб подальші повідомлення в цьому потоці продовжували маршрутизуватися до того самого сеансу (включно із сеансами підагентів). + + Discord може прив’язати потік до цілі сесії, щоб подальші повідомлення в цьому потоці продовжували маршрутизуватися до тієї самої сесії (включно із сесіями субагентів). Команди: - - `/focus ` прив’язати поточний/новий потік до цілі підагента/сеансу - - `/unfocus` вилучити прив’язку поточного потоку + - `/focus ` прив’язати поточний/новий потік до цілі субагента/сесії + - `/unfocus` видалити прив’язку поточного потоку - `/agents` показати активні запуски та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне зняття фокуса через неактивність для сфокусованих прив’язок + - `/session idle ` переглянути/оновити автоматичне скасування фокуса через неактивність для сфокусованих прив’язок - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок Конфігурація: @@ -647,16 +647,16 @@ Slash-команди `/model` і `/models` відкривають інтерак - `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). - - Для стабільних "always-on" робочих просторів ACP налаштуйте типізовані прив'язки ACP верхнього рівня, націлені на розмови Discord. + + Для стабільних «завжди активних» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord. Шлях конфігурації: @@ -712,11 +712,11 @@ 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), щоб дізнатися подробиці поведінки прив’язок. @@ -728,14 +728,14 @@ Slash-команди `/model` і `/models` відкривають інтерак - `all` - `allowlist` (використовує `guilds..users`) - Події реакцій перетворюються на системні події та приєднуються до маршрутизованої сесії Discord. + Події реакцій перетворюються на системні події та додаються до маршрутизованої сесії Discord. `ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. - Порядок розв'язання: + Порядок визначення: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` @@ -744,15 +744,15 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - Discord приймає unicode-емодзі або назви користувацьких емодзі. + - Discord приймає Unicode-емодзі або назви користувацьких емодзі. - Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису. - Записи конфігурації, ініційовані каналом, увімкнені типово. + Записи конфігурації, ініційовані каналом, увімкнено типово. - Це впливає на потоки `/config set|unset` (коли функції команд увімкнені). + Це впливає на потоки `/config set|unset` (коли командні функції увімкнено). Вимкнення: @@ -769,7 +769,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - Маршрутизуйте WebSocket-трафік Discord gateway і стартові REST-запити (ID застосунку + розв'язання списку дозволів) через HTTP(S)-проксі з `channels.discord.proxy`. + Маршрутизуйте трафік Discord gateway WebSocket і стартові REST-запити (ID застосунку + визначення списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. ```json5 { @@ -781,7 +781,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Перевизначення для окремого облікового запису: + Перевизначення для облікового запису: ```json5 { @@ -800,7 +800,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - Увімкніть розв'язання PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи: + Увімкніть визначення PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи: ```json5 { @@ -817,17 +817,17 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - списки дозволів можуть використовувати `pk:` - - показувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошуки використовують ID оригінального повідомлення та обмежені часовим вікном - - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не встановлено + - списки дозволених можуть використовувати `pk:` + - відображувані імена учасників зіставляються за назвою/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` + - пошуки використовують ID початкового повідомлення й обмежені часовим вікном + - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не задано Оновлення присутності застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте автоматичну присутність. - Приклад лише статусу: + Приклад лише зі статусом: ```json5 { @@ -852,7 +852,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Приклад Streaming: + Приклад трансляції: ```json5 { @@ -869,13 +869,13 @@ Slash-команди `/model` і `/models` відкривають інтерак Мапа типів активності: - 0: Грає - - 1: Streaming (потребує `activityUrl`) + - 1: Трансляція (потребує `activityUrl`) - 2: Слухає - 3: Дивиться - - 4: Користувацький (використовує текст активності як стан статусу; емодзі необов'язковий) + - 4: Користувацька (використовує текст активності як стан статусу; емодзі необов’язковий) - 5: Змагається - Приклад автоматичної присутності (сигнал працездатності середовища виконання): + Приклад автоматичної присутності (сигнал стану середовища виконання): ```json5 { @@ -892,7 +892,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Автоматична присутність зіставляє доступність середовища виконання зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов'язкові перевизначення тексту: + Автоматична присутність зіставляє доступність середовища виконання зі статусом Discord: справний => онлайн, погіршений або невідомий => бездіяльний, вичерпаний або недоступний => не турбувати. Необов’язкові перевизначення тексту: - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -901,34 +901,34 @@ Slash-команди `/model` і `/models` відкривають інтерак - Discord підтримує обробку схвалень на основі кнопок у приватних повідомленнях і може необов'язково публікувати запити на схвалення у вихідному каналі. + Discord підтримує обробку схвалень на основі кнопок у приватних повідомленнях і може необов’язково публікувати запити на схвалення в початковому каналі. Шлях конфігурації: - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (необов'язково; за можливості використовує резервний `commands.ownerAllowFrom`) + - `channels.discord.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord автоматично вмикає нативні схвалення exec, коли `enabled` не задано або має значення `"auto"` і можна розв'язати принаймні одного схвалювача, або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить схвалювачів exec з канального `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, коли власник, що викликав команду, має маршрут власника Discord; якщо це недоступно, він використовує резервний перший доступний маршрут власника з `commands.ownerAllowFrom`, наприклад Telegram. + Для чутливих групових команд лише для власників, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на схвалення та фінальні результати приватно. Спершу він пробує Discord DM, коли власник, який викликає команду, має маршрут власника Discord; якщо це недоступно, він повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram. - Коли `target` має значення `channel` або `both`, запит на схвалення видимий у каналі. Лише розв'язані схвалювачі можуть користуватися кнопками; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо вивести з ключа сесії, OpenClaw використовує резервну доставку через приватне повідомлення. + Коли `target` має значення `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені затверджувачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тому вмикайте доставлення в канал лише в довірених каналах. Якщо ID каналу неможливо вивести з ключа сесії, OpenClaw повертається до доставлення в DM. - Discord також відображає спільні кнопки схвалення, які використовують інші чат-канали. Нативний адаптер Discord здебільшого додає маршрутизацію приватних повідомлень схвалювачам і розсилання в канали. - Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw + Discord також відображає спільні кнопки схвалення, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для затверджувачів і розсилання в канали. + Коли ці кнопки наявні, вони є основним UX схвалення; OpenClaw має включати ручну команду `/approve` лише тоді, коли результат інструмента каже, що чат-схвалення недоступні або ручне схвалення є єдиним шляхом. - Якщо нативне середовище виконання схвалень Discord не активне, OpenClaw зберігає - локальний детермінований запит `/approve ` видимим. Якщо + Якщо нативне середовище виконання схвалень Discord не активне, OpenClaw залишає + локальну детерміновану підказку `/approve ` видимою. Якщо середовище виконання активне, але нативну картку неможливо доставити до жодної цілі, - OpenClaw надсилає резервне сповіщення в той самий чат з точною командою `/approve` + OpenClaw надсилає резервне сповіщення в тому самому чаті з точною командою `/approve` з очікуваного схвалення. - Автентифікація Gateway і розв'язання схвалень дотримуються спільного контракту клієнта Gateway (`plugin:` ID розв'язуються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Типово схвалення спливають через 30 хвилин. + Автентифікація Gateway і визначення схвалень дотримуються спільного контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Схвалення типово спливають через 30 хвилин. - Див. [Схвалення exec](/uk/tools/exec-approvals). + Див. [схвалення exec](/uk/tools/exec-approvals). @@ -944,7 +944,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - модерація: `timeout`, `kick`, `ban` - присутність: `setPresence` -Дія `event-create` приймає необов'язковий параметр `image` (URL або шлях до локального файлу), щоб установити зображення обкладинки запланованої події. +Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб задати обкладинку запланованої події. Шлюзи дій розташовані в `channels.discord.actions.*`. @@ -957,13 +957,13 @@ Slash-команди `/model` і `/models` відкривають інтерак | moderation | вимкнено | | presence | вимкнено | -## UI Components v2 +## UI компонентів v2 -OpenClaw використовує Discord components v2 для схвалень exec і маркерів між контекстами. Дії з повідомленнями Discord також можуть приймати `components` для користувацького UI (розширене використання; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. +OpenClaw використовує компоненти Discord v2 для схвалень exec і маркерів між контекстами. Дії з повідомленнями Discord також можуть приймати `components` для користувацького UI (розширено; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендуються. - `channels.discord.ui.components.accentColor` задає акцентний колір, який використовують контейнери компонентів Discord (hex). -- Задайте для окремого облікового запису через `channels.discord.accounts..ui.components.accentColor`. -- `embeds` ігноруються, коли присутні components v2. +- Задайте для кожного облікового запису через `channels.discord.accounts..ui.components.accentColor`. +- `embeds` ігноруються, коли наявні компоненти v2. Приклад: @@ -983,20 +983,20 @@ OpenClaw використовує Discord components v2 для схвалень ## Голос -Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвилі). Gateway підтримує обидві. +Discord має дві окремі голосові поверхні: **голосові канали** в реальному часі (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвилі). Gateway підтримує обидві. ### Голосові канали Контрольний список налаштування: 1. Увімкніть Message Content Intent у Discord Developer Portal. -2. Увімкніть Server Members Intent, коли використовуються списки дозволів ролей/користувачів. -3. Запросіть бота з областями `bot` і `applications.commands`. +2. Увімкніть Server Members Intent, коли використовуються списки дозволених ролей/користувачів. +3. Запросіть бота зі scopes `bot` і `applications.commands`. 4. Надайте Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі. 5. Увімкніть нативні команди (`commands.native` або `channels.discord.commands.native`). 6. Налаштуйте `channels.discord.voice`. -Використовуйте `/vc join|leave|status`, щоб керувати сесіями. Команда використовує типового агента облікового запису та дотримується тих самих правил списків дозволів і групової політики, що й інші команди Discord. +Використовуйте `/vc join|leave|status`, щоб керувати сесіями. Команда використовує типового агента облікового запису й дотримується тих самих правил списку дозволених і групових політик, що й інші команди Discord. ```bash /vc join channel: @@ -1034,33 +1034,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`, щоб вимкнути голосове середовище виконання та намір Gateway `GuildVoiceStates`. -- `channels.discord.intents.voiceStates` може явно перевизначити підписку на намір стану голосу. Не задавайте його, щоб намір відповідав `voice.enabled`. -- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються напряму до параметрів приєднання `@discordjs/voice`. -- Значення за замовчуванням `@discordjs/voice`: `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано. -- OpenClaw також відстежує збої розшифрування під час отримання та автоматично відновлюється, залишаючи голосовий канал і повторно приєднуючись до нього після повторних збоїв у короткому проміжку часу. -- Якщо після оновлення журнали отримання неодноразово показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінія `@discordjs/voice` містить виправлення доповнення з upstream із PR discord.js #11449, який закрив issue discord.js #11419. +- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосовому каналі Discord. Залиште його невстановленим, щоб успадкувати маршрутизовану модель агента. +- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрипцію. +- Ходи голосової транскрипції визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`). +- Голос увімкнено за замовчуванням; задайте `channels.discord.voice.enabled=false`, щоб вимкнути голосове середовище виконання та Gateway 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. Конвеєр голосового каналу: -- Захоплення PCM із Discord перетворюється на тимчасовий файл WAV. +- Захоплення PCM Discord перетворюється на тимчасовий WAV-файл. - `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`. -- Стенограма надсилається через звичайний вхідний потік Discord і маршрутизацію. +- Транскрипт надсилається через звичайний вхідний потік Discord і маршрутизацію. - `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-адреси відхиляються). +- Надайте **локальний шлях до файлу** (URL відхиляються). - Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). -- Приймається будь-який аудіоформат; OpenClaw за потреби перетворює його на OGG/Opus. +- Приймається будь-який аудіоформат; OpenClaw за потреби конвертує в OGG/Opus. ```bash message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true) @@ -1072,16 +1072,16 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a - увімкніть Message Content Intent - - увімкніть Server Members Intent, коли ви залежите від розпізнавання користувача/учасника - - перезапустіть gateway після зміни намірів + - увімкніть Server Members Intent, коли залежите від визначення користувача/учасника + - перезапустіть gateway після зміни intent - перевірте `groupPolicy` - - перевірте список дозволених guild у `channels.discord.guilds` - - якщо існує мапа `channels` для guild, дозволені лише перелічені канали + - перевірте allowlist guild у `channels.discord.guilds` + - якщо існує мапа guild `channels`, дозволені лише перелічені канали - перевірте поведінку `requireMention` і шаблони згадок Корисні перевірки: @@ -1097,9 +1097,9 @@ openclaw logs --follow Поширені причини: - - `groupPolicy="allowlist"` без відповідного списку дозволених guild/каналів - - `requireMention` налаштовано в неправильному місці (має бути в `channels.discord.guilds` або записі каналу) - - відправника заблоковано списком дозволених `users` guild/каналу + - `groupPolicy="allowlist"` без відповідного allowlist guild/каналу + - `requireMention` налаштовано не в тому місці (має бути під `channels.discord.guilds` або записом каналу) + - відправника заблоковано allowlist `users` guild/каналу @@ -1110,13 +1110,13 @@ openclaw logs --follow - `Slow listener detected ...` - `stuck session: sessionKey=agent:...:discord:... state=processing ...` - Параметри черги Carbon gateway: + Регулятори черги Gateway Discord: - один обліковий запис: `channels.discord.eventQueue.listenerTimeout` - кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout` - - це керує лише роботою слухача Carbon gateway, а не тривалістю ходу агента + - це керує лише роботою слухача Gateway Discord, а не тривалістю ходу агента - Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень передають їх негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сеансу, доки життєвий цикл сеансу/інструмента/середовища виконання не завершить або не перерве роботу. + Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень одразу передають керування, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища виконання не завершить або не перерве роботу. ```json5 { @@ -1136,59 +1136,59 @@ openclaw logs --follow - - OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартної URL-адреси gateway Discord і обмежуються за частотою в журналах. + + OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартного URL Gateway Discord і обмежуються за частотою в журналах. - Параметри тайм-ауту метаданих: + Регулятори тайм-ауту метаданих: - один обліковий запис: `channels.discord.gatewayInfoTimeoutMs` - кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs` - - запасний варіант env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` + - запасний варіант env, коли config не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` - стандартне значення: `30000` (30 секунд), максимум: `120000` - - Перевірки дозволів `channels status --probe` працюють лише для числових ідентифікаторів каналів. + + Перевірки дозволів `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 у режимі `pairing` - + За замовчуванням повідомлення, створені ботами, ігноруються. - Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте строгі правила згадок і allowlist, щоб уникнути циклічної поведінки. + Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте строгі правила згадок і allowlist, щоб уникнути циклів. Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. - + - - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була наявна логіка відновлення прийому голосу Discord - - підтвердьте `channels.discord.voice.daveEncryption=true` (стандартно) - - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (стандартне значення upstream) і налаштовуйте лише за потреби + - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була наявна логіка відновлення приймання голосу Discord + - підтвердьте `channels.discord.voice.daveEncryption=true` (стандартне значення) + - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (стандартне upstream-значення) і налаштовуйте лише за потреби - стежте в журналах за: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали та порівняйте їх з upstream-історією прийому DAVE у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449) + - якщо помилки тривають після автоматичного повторного приєднання, зберіть журнали та порівняйте з upstream-історією приймання DAVE у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449) -## Довідник із конфігурації +## Довідник конфігурації -Основний довідник: [Довідник із конфігурації - Discord](/uk/gateway/config-channels#discord). +Основний довідник: [Довідник конфігурації - Discord](/uk/gateway/config-channels#discord). - + - запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots` - політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` @@ -1196,8 +1196,8 @@ openclaw logs --follow - черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` - метадані Gateway: `gatewayInfoTimeoutMs` - відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` -- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- доставлення: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` +- потокова передача: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` - медіа/повтор: `mediaMaxMb` (обмежує вихідні завантаження Discord, стандартно `100MB`), `retry` - дії: `actions.*` - присутність: `activity`, `status`, `activityType`, `activityUrl` @@ -1206,31 +1206,31 @@ openclaw logs --follow -## Безпека й експлуатація +## Безпека та експлуатація -- Вважайте токени ботів секретами (у контрольованих середовищах бажано `DISCORD_BOT_TOKEN`). +- Розглядайте токени ботів як секрети (`DISCORD_BOT_TOKEN` бажано використовувати в контрольованих середовищах). - Надавайте мінімально необхідні дозволи Discord. -- Якщо розгортання/стан команд застаріли, перезапустіть gateway і повторно перевірте за допомогою `openclaw channels status --probe`. +- Якщо deploy/state команд застарів, перезапустіть gateway і повторно перевірте за допомогою `openclaw channels status --probe`. ## Пов’язане - - Зіставте користувача Discord із gateway. + + Прив’яжіть користувача Discord до gateway. - + Груповий чат і поведінка allowlist. - + Маршрутизуйте вхідні повідомлення до агентів. - + Модель загроз і посилення захисту. - - Зіставляйте guilds і канали з агентами. + + Зіставляйте guild і канали з агентами. - - Нативна поведінка команд. + + Поведінка нативних команд.