From 9eccc1ac4afee00119d4dca07feca4c8ec0b68f6 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Fri, 1 May 2026 10:25:45 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/discord.md | 479 ++++++++++++++++++------------------ 1 file changed, 240 insertions(+), 239 deletions(-) diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index f1cca12c1..d4fc63f32 100644 --- a/docs/uk/channels/discord.md +++ b/docs/uk/channels/discord.md @@ -1,22 +1,22 @@ --- read_when: - Робота над функціями каналу Discord -summary: Стан підтримки Discord-бота, можливості та конфігурація +summary: Статус підтримки бота Discord, можливості та налаштування title: Discord x-i18n: - generated_at: "2026-05-01T10:09:56Z" + generated_at: "2026-05-01T10:23:14Z" model: gpt-5.5 provider: openai - source_hash: cd12f85a0acb30f606ef97512c04b443b2be301272962340cb08596f91489bd2 + source_hash: 1d0d40792bf83a8d44dba3c70a94d888fb57af25bf240185265fd3a5edb207cb source_path: channels/discord.md workflow: 16 --- -Готово для приватних повідомлень і каналів guild через офіційний Discord gateway. +Готово для DM і каналів гільдій через офіційний Discord Gateway. - - Приватні повідомлення Discord за замовчуванням використовують режим сполучення. + + DM у Discord за замовчуванням переходять у режим зв’язування. Нативна поведінка команд і каталог команд. @@ -28,22 +28,22 @@ x-i18n: ## Швидке налаштування -Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і сполучити його з 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** і увімкніть: + + Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і увімкніть: - **Message Content Intent** (обов’язково) - - **Server Members Intent** (рекомендовано; обов’язково для списків дозволених ролей і зіставлення імен з ID) - - **Presence Intent** (необов’язково; потрібно лише для оновлень присутності) + - **Server Members Intent** (рекомендовано; обов’язково для allowlists ролей і зіставлення імен з ID) + - **Presence Intent** (необов’язково; потрібен лише для оновлень присутності) @@ -51,15 +51,15 @@ x-i18n: Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**. - Попри назву, це створює ваш перший токен — нічого не "скидається". + Попри назву, це створює ваш перший токен — нічого не "скидається." - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро вам знадобиться. + Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він знадобиться вам незабаром. - - Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на сервер. + + Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на свій сервер. Прокрутіть униз до **OAuth2 URL Generator** і увімкніть: @@ -77,26 +77,26 @@ x-i18n: - Attach Files - Add Reactions (необов’язково) - Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в гілках Discord, зокрема у сценаріях форумних або медіаканалів, які створюють чи продовжують гілку, також увімкніть **Send Messages in Threads**. - Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб під’єднати. Тепер ви маєте бачити свого бота на сервері Discord. + Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах Discord, зокрема у сценаріях форумних або медіаканалів, які створюють або продовжують тред, також увімкніть **Send Messages in Threads**. + Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте бачити свого бота на сервері Discord. - - У застосунку Discord потрібно увімкнути Developer Mode, щоб копіювати внутрішні ID. + + Повернувшись у застосунок Discord, потрібно ввімкнути режим розробника, щоб ви могли копіювати внутрішні ID. 1. Натисніть **User Settings** (значок шестерні поруч із вашим аватаром) → **Advanced** → увімкніть **Developer Mode** - 2. Клацніть правою кнопкою миші **піктограму сервера** на бічній панелі → **Copy Server 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. Якщо ви плануєте використовувати лише канали guild, після сполучення приватні повідомлення можна вимкнути. + Це дає учасникам сервера (зокрема ботам) змогу надсилати вам DM. Залиште це ввімкненим, якщо хочете використовувати DM Discord з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути DM після зв’язування. @@ -120,22 +120,22 @@ openclaw config patch --file ./discord.patch.json5 openclaw gateway ``` - Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через Mac-застосунок OpenClaw або зупинивши й запустивши заново процес `openclaw gateway run`. - Для керованих інсталяцій сервісу виконайте `openclaw gateway install` з shell, де присутній `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв’язати env SecretRef після перезапуску. - Якщо ваш хост заблокований або обмежений за частотою запитів під час початкового пошуку застосунку Discord, задайте ID застосунку/клієнта Discord із Developer Portal, щоб запуск міг пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для облікового запису за замовчуванням або `channels.discord.accounts..applicationId`, коли запускаєте кілька ботів Discord. + Якщо OpenClaw уже працює як фонова служба, перезапустіть його через застосунок OpenClaw для Mac або зупинивши й повторно запустивши процес `openclaw gateway run`. + Для встановлень керованої служби запустіть `openclaw gateway install` з оболонки, де присутній `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб служба могла розв’язати env SecretRef після перезапуску. + Якщо ваш хост заблокований або обмежений за частотою запитів під час стартового пошуку застосунку Discord, задайте ID застосунку/клієнта Discord з Developer Portal, щоб запуск міг пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для стандартного акаунта або `channels.discord.accounts..applicationId`, коли запускаєте кількох ботів Discord. - + - Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому це. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / конфігурація. + Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому. Якщо Discord — ваш перший канал, натомість використовуйте вкладку CLI / config. > "I already set my Discord bot token in config. Please finish Discord setup with User ID `` and Server ID ``." - - Якщо ви віддаєте перевагу файловій конфігурації, задайте: + + Якщо ви віддаєте перевагу конфігурації на основі файлів, задайте: ```json5 { @@ -152,15 +152,15 @@ openclaw gateway } ``` - Env fallback для облікового запису за замовчуванням: + Env fallback для стандартного акаунта: ```bash DISCORD_BOT_TOKEN=... ``` - Для сценарного або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторіть запуск без `--dry-run`. Підтримуються plaintext значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). + Для скриптового або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторно запустіть без `--dry-run`. Значення `token` у відкритому тексті підтримуються. Значення SecretRef також підтримуються для `channels.discord.token` через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). - Для кількох ботів Discord зберігайте токен і ID застосунку кожного бота в його обліковому записі. Верхньорівневий `channels.discord.applicationId` успадковується обліковими записами, тому задавайте його там лише тоді, коли всі облікові записи мають використовувати той самий ID застосунку. + Для кількох ботів Discord зберігайте токен кожного бота та ID застосунку в його акаунті. Верхньорівневий `channels.discord.applicationId` успадковується акаунтами, тож задавайте його там лише тоді, коли кожен акаунт має використовувати той самий ID застосунку. ```json5 { @@ -187,12 +187,12 @@ DISCORD_BOT_TOKEN=... - - Дочекайтеся, доки gateway запрацює, а потім надішліть приватне повідомлення своєму боту в Discord. Він відповість кодом сполучення. + + Зачекайте, доки Gateway запрацює, а потім надішліть DM своєму боту в Discord. Він відповість кодом зв’язування. - Надішліть код сполучення своєму агенту у вашому наявному каналі: + Надішліть код зв’язування своєму агенту у вашому наявному каналі: > "Approve this Discord pairing code: ``" @@ -206,26 +206,26 @@ openclaw pairing approve discord - Коди сполучення спливають через 1 годину. + Коди зв’язування спливають через 1 годину. - Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення. + Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через DM. -Розв’язання токена враховує обліковий запис. Значення токена з конфігурації мають пріоритет над env fallback. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. -Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один монітор gateway для цього токена. Токен із конфігурації має пріоритет над стандартним env fallback; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис позначається як вимкнений. -Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій надсилання й читання/перевірки (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному runtime-знімку. +Розв’язання токена враховує акаунт. Значення токена з конфігурації мають перевагу над env fallback. `DISCORD_BOT_TOKEN` використовується лише для стандартного акаунта. +Якщо два ввімкнені акаунти Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один монітор Gateway для цього токена. Токен із конфігурації має перевагу над стандартним env fallback; інакше перший увімкнений акаунт перемагає, а дублікат акаунта повідомляється як вимкнений. +Для розширених вихідних викликів (інструмент повідомлень/дії з каналами) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика акаунта й налаштування повторних спроб усе ще беруться з вибраного акаунта в активному runtime snapshot. -## Рекомендовано: налаштуйте робочий простір guild +## Рекомендовано: налаштуйте робочий простір гільдії -Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Коли DM запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. - - Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях. + + Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в DM. @@ -255,16 +255,16 @@ openclaw pairing approve discord - За замовчуванням ваш агент відповідає в каналах guild лише тоді, коли його згадують через @mention. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення. + За замовчуванням ваш агент відповідає в каналах гільдії лише коли його @mentioned. Для приватного сервера ви, ймовірно, захочете, щоб він відповідав на кожне повідомлення. - У каналах guild звичайні фінальні відповіді помічника за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно через інструмент `message`, тому агент може за замовчуванням залишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. + У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, тож агент може за замовчуванням лишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. > "Allow my agent to respond on this server without having to be @mentioned" - Задайте `requireMention: false` у конфігурації guild: + Задайте `requireMention: false` у конфігурації гільдії: ```json5 { @@ -287,45 +287,45 @@ openclaw pairing approve discord - - За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях приватних повідомлень. Канали guild не завантажують MEMORY.md автоматично. + + За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях DM. Канали гільдії не завантажують MEMORY.md автоматично. > "When I ask questions in Discord channels, use memory_search or memory_get if you need long-term context from MEMORY.md." - Якщо вам потрібен спільний контекст у кожному каналі, помістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони інжектяться в кожну сесію). Зберігайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті. + Якщо вам потрібен спільний контекст у кожному каналі, розмістіть сталі інструкції в `AGENTS.md` або `USER.md` (вони впроваджуються для кожної сесії). Зберігайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті. -Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкуватися. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що підходить вашому робочому процесу. +Тепер створіть кілька каналів на своєму сервері Discord і починайте спілкуватися. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що відповідає вашому робочому процесу. -## Модель runtime +## Модель виконання -- Gateway володіє підключенням Discord. -- Маршрутизація відповідей детермінована: вхідні відповіді з Discord повертаються до Discord. -- Метадані гільдії/каналу Discord додаються до промпта моделі як недовірений - контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт +- Gateway володіє з’єднанням Discord. +- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються до Discord. +- Метадані гільдії/каналу Discord додаються до підказки моделі як ненадійний + контекст, а не як видимий користувачу префікс відповіді. Якщо модель скопіює цей конверт назад, 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, придатних до доставки. +- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують головну сесію агента (`agent:main:main`). +- Канали гільдії ізольовані ключами сесій (`agent::discord:channel:`). +- Групові DM ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`). +- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас зберігаючи `CommandTargetSessionKey` до маршрутизованої сесії розмови. +- Доставка текстових оголошень cron/heartbeat до Discord використовує фінальну + відповідь, видиму асистенту, один раз. Медіа та структуровані payload компонентів залишаються + багатоповідомними, коли агент надсилає кілька deliverable payload. ## Канали форумів -Канали форумів і медіа в Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення: +Форуми та медіаканали Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення: - Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити тред. Заголовок треду використовує перший непорожній рядок вашого повідомлення. -- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для каналів форумів. +- Використайте `openclaw message thread create`, щоб створити тред безпосередньо. Не передавайте `--message-id` для каналів форумів. Приклад: надіслати до батьківського форуму, щоб створити тред @@ -345,7 +345,7 @@ openclaw message thread create --channel discord --target channel: \ ## Інтерактивні компоненти -OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агентів. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодій маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. +OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. Підтримувані блоки: @@ -353,21 +353,21 @@ OpenClaw підтримує контейнери компонентів Discord - Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, списків вибору та форм до завершення їхнього строку дії. +За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, списки вибору та форми кілька разів, доки вони не спливуть. -Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли це налаштовано, користувачі без збігу отримують ефемерну відмову. +Щоб обмежити, хто може натиснути кнопку, установіть `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли налаштовано, користувачі, що не збігаються, отримують ефемерну відмову. -Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору є ефемерною, і використовувати її може лише користувач, який її викликав. +Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і використовувати її може лише користувач, який викликав команду. -Файлові вкладення: +Вкладення файлів: - Блоки `file` мають вказувати на посилання вкладення (`attachment://`) - Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів -- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням вкладення +- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має відповідати посиланню вкладення Модальні форми: -- Додайте `components.modal` з до 5 полями +- Додайте `components.modal` із кількістю полів до 5 - Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` - OpenClaw автоматично додає кнопку запуску @@ -425,54 +425,54 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` -## Керування доступом і маршрутизація +## Контроль доступу та маршрутизація - `channels.discord.dmPolicy` керує доступом до DM. `channels.discord.allowFrom` є канонічним allowlist для DM. + `channels.discord.dmPolicy` керує доступом до DM. `channels.discord.allowFrom` є канонічним списком дозволених DM. - `pairing` (за замовчуванням) - `allowlist` - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`) - `disabled` - Якщо політика DM не відкрита, невідомих користувачів блокують (або пропонують створити пару в режимі `pairing`). + Якщо політика DM не відкрита, невідомі користувачі блокуються (або отримують запит на сполучення в режимі `pairing`). - Пріоритетність кількох акаунтів: + Пріоритет для кількох облікових записів: - - `channels.discord.accounts.default.allowFrom` застосовується лише до акаунта `default`. - - Для одного акаунта `allowFrom` має пріоритет над застарілим `dm.allowFrom`. - - Іменовані акаунти успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застарілий `dm.allowFrom` не задані. - - Іменовані акаунти не успадковують `channels.discord.accounts.default.allowFrom`. + - `channels.discord.accounts.default.allowFrom` застосовується лише до облікового запису `default`. + - Для одного облікового запису `allowFrom` має пріоритет над застарілим `dm.allowFrom`. + - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застарілий `dm.allowFrom` не встановлені. + - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`. - Застарілі `channels.discord.dm.policy` і `channels.discord.dm.allowFrom` усе ще читаються для сумісності. `openclaw doctor --fix` мігрує їх у `dmPolicy` і `allowFrom`, коли це можна зробити без зміни доступу. + Застарілі `channels.discord.dm.policy` і `channels.discord.dm.allowFrom` усе ще читаються для сумісності. `openclaw doctor --fix` мігрує їх до `dmPolicy` і `allowFrom`, коли може зробити це без зміни доступу. Формат цілі DM для доставки: - `user:` - згадка `<@id>` - Голі числові ID зазвичай розпізнаються як ID каналів, коли активне значення каналу за замовчуванням, але ID, перелічені в ефективному DM `allowFrom` акаунта, для сумісності трактуються як цілі користувацьких DM. + Голі числові ID зазвичай розпізнаються як ID каналів, коли активне типове значення каналу, але ID, перелічені в ефективному DM `allowFrom` облікового запису, трактуються як цілі DM користувача для сумісності. - Обробка гільдій керується `channels.discord.groupPolicy`: + Обробкою гільдій керує `channels.discord.groupPolicy`: - `open` - `allowlist` - `disabled` - Безпечний базовий режим, коли існує `channels.discord`, — `allowlist`. + Безпечною базовою лінією, коли існує `channels.discord`, є `allowlist`. Поведінка `allowlist`: - - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug приймається) - - необов'язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles` + - гільдія має відповідати `channels.discord.guilds` (переважно `id`, slug приймається) + - необов’язкові списки дозволених відправників: `users` (рекомендовані стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles` - пряме зіставлення імен/тегів вимкнене за замовчуванням; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності - - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменами/тегами - - якщо гільдія має налаштовані `channels`, канали не зі списку забороняються - - якщо гільдія не має блоку `channels`, дозволені всі канали в цій гільдії з allowlist + - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів + - якщо для гільдії налаштовано `channels`, канали не зі списку заборонені + - якщо гільдія не має блока `channels`, дозволені всі канали в цій гільдії зі списку дозволених Приклад: @@ -498,33 +498,33 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Якщо ви лише задаєте `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, runtime fallback — `groupPolicy="allowlist"` (із попередженням у логах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`. + Якщо ви встановите лише `DISCORD_BOT_TOKEN` і не створите блок `channels.discord`, runtime fallback буде `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`. - Повідомлення гільдій за замовчуванням обмежені згадками. + Повідомлення гільдії за замовчуванням пропускаються через перевірку згадки. - Виявлення згадок включає: + Виявлення згадок охоплює: - явну згадку бота - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`) - неявну поведінку відповіді боту в підтримуваних випадках `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`). - `ignoreOtherMentions` необов'язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here). + `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here). Групові DM: - за замовчуванням: ігноруються (`dm.groupEnabled=false`) - - необов'язковий allowlist через `dm.groupChannels` (ID каналів або slugs) + - необов’язковий список дозволених через `dm.groupChannels` (ID каналів або slugs) ### Маршрутизація агентів на основі ролей -Використовуйте `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 { @@ -551,14 +551,14 @@ Slash-команди `/model` і `/models` відкривають інтерак ## Нативні команди та авторизація команд - `commands.native` за замовчуванням дорівнює `"auto"` і ввімкнено для Discord. -- Перевизначення для каналу: `channels.discord.commands.native`. +- Перевизначення для кожного каналу: `channels.discord.commands.native`. - `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord. -- Авторизація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень. -- Команди можуть усе ще бути видимими в UI Discord для користувачів без авторизації; виконання все одно застосовує авторизацію OpenClaw і повертає "not authorized". +- Авторизація нативних команд використовує ті самі списки дозволених/політики Discord, що й звичайна обробка повідомлень. +- Команди можуть усе ще бути видимими в UI Discord для користувачів, які не авторизовані; виконання все одно застосовує авторизацію OpenClaw і повертає "not authorized". Див. [Slash-команди](/uk/tools/slash-commands) для каталогу команд і поведінки. -Налаштування slash-команд за замовчуванням: +Типові налаштування slash-команд: - `ephemeral: true` @@ -579,20 +579,20 @@ Slash-команди `/model` і `/models` відкривають інтерак - `batched` Примітка: `off` вимикає неявне тредування відповідей. Явні теги `[[reply_to_*]]` усе ще враховуються. - `first` завжди додає неявне нативне посилання відповіді до першого вихідного повідомлення Discord за хід. - `batched` додає неявне нативне посилання відповіді Discord лише тоді, коли - вхідний хід був debounce-пакетом із кількох повідомлень. Це корисно, - коли нативні відповіді потрібні головно для неоднозначних сплесків чату, а не для кожного + `first` завжди прикріплює неявне посилання нативної відповіді до першого вихідного повідомлення Discord для ходу. + `batched` прикріплює неявне посилання нативної відповіді Discord лише тоді, коли + вхідний хід був дебаунсованим пакетом із кількох повідомлень. Це корисно, + коли ви хочете нативні відповіді переважно для неоднозначних вибухових чатів, а не для кожного ходу з одним повідомленням. - 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, коли кілька ботів або gateways спільно використовують акаунт. + Типове значення залишається `off`, оскільки редагування попереднього перегляду Discord швидко впираються в обмеження частоти, коли кілька ботів або gateways спільно використовують обліковий запис. ```json5 { @@ -610,11 +610,11 @@ Slash-команди `/model` і `/models` відкривають інтерак ``` - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. - - `block` видає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). - - Медіа, помилка та фінальні повідомлення з явною відповіддю скасовують очікувані редагування попереднього перегляду. + - `block` випускає шматки розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). + - Медіа, помилки та фінальні відповіді з явними reply скасовують очікувані редагування попереднього перегляду. - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. - Потоковий попередній перегляд підтримує лише текст; медіавідповіді повертаються до звичайної доставки. Коли потокову передачу `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної потокової передачі. + Потокова передача попереднього перегляду підтримує лише текст; медіавідповіді повертаються до звичайної доставки. Коли потокову передачу `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної потокової передачі. @@ -625,7 +625,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - fallback: `messages.groupChat.historyLimit` - `0` вимикає - Елементи керування історією DM: + Керування історією DM: - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` @@ -634,24 +634,24 @@ Slash-команди `/model` і `/models` відкривають інтерак - Гілки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. - Сеанси гілок успадковують вибір `/model` рівня сеансу батьківського каналу як резервний варіант лише для моделі; локальні для гілки вибори `/model` все одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо успадкування транскрипту не ввімкнено. - - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових авто-гілок початкове наповнення з батьківського транскрипту. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`. - - Реакції інструментів повідомлень можуть розпізнавати цілі DM `user:`. + - `channels.discord.thread.inheritParent` (типово `false`) вмикає заповнення нових автоматичних гілок із батьківського транскрипту. Перевизначення для окремого облікового запису розміщуються в `channels.discord.accounts..thread.inheritParent`. + - Реакції інструмента повідомлень можуть розпізнавати цілі DM `user:`. - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді. - Теми каналів додаються як **ненадійний** контекст. Списки дозволених визначають, хто може запускати агента, але не є повною межею редагування додаткового контексту. + Теми каналів вставляються як **ненадійний** контекст. Списки дозволених визначають, хто може запускати агента, а не є повною межею редагування додаткового контексту. - - Discord може прив’язати гілку до цілі сеансу, щоб подальші повідомлення в цій гілці й надалі маршрутизувалися до того самого сеансу (зокрема сеансів субагентів). + + Discord може прив'язати гілку до цілі сеансу, щоб подальші повідомлення в цій гілці продовжували маршрутизуватися до того самого сеансу (зокрема сеансів субагентів). Команди: - - `/focus ` прив’язати поточну/нову гілку до цілі субагента/сеансу - - `/unfocus` вилучити прив’язку поточної гілки - - `/agents` показати активні запуски та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне зняття фокуса через неактивність для сфокусованих прив’язок - - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок + - `/focus ` прив'язати поточну/нову гілку до цілі субагента/сеансу + - `/unfocus` видалити прив'язку поточної гілки + - `/agents` показати активні запуски та стан прив'язки + - `/session idle ` переглянути/оновити автоматичне скасування фокусу через неактивність для сфокусованих прив'язок + - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив'язок Конфігурація: @@ -679,18 +679,18 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - `session.threadBindings.*` задає глобальні значення за замовчуванням. + - `session.threadBindings.*` задає глобальні типові значення. - `channels.discord.threadBindings.*` перевизначає поведінку Discord. - - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). - - Якщо прив’язки гілок вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки гілок недоступні. + - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив'язувати гілки для `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив'язувати гілки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). + - Якщо прив'язки гілок вимкнено для облікового запису, `/focus` і пов'язані операції прив'язки гілок недоступні. Див. [Субагенти](/uk/tools/subagents), [Агенти ACP](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference). - - Для стабільних «завжди ввімкнених» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, що націлені на розмови Discord. + + Для стабільних "завжди ввімкнених" робочих просторів ACP налаштуйте типізовані прив'язки ACP верхнього рівня, що націлені на розмови Discord. Шлях конфігурації: @@ -746,23 +746,23 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - `/acp spawn codex --bind here` прив’язує поточний канал або гілку на місці й залишає майбутні повідомлення в тому самому сеансі ACP. Повідомлення гілки успадковують прив’язку батьківського каналу. - - У прив’язаному каналі або гілці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив’язки гілок можуть перевизначати розпізнавання цілі, поки активні. - - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірню гілку через `--thread auto|here`. + - `/acp spawn codex --bind here` прив'язує поточний канал або гілку на місці й утримує майбутні повідомлення в тому самому сеансі ACP. Повідомлення гілок успадковують прив'язку батьківського каналу. + - У прив'язаному каналі або гілці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив'язки гілок можуть перевизначати розпізнавання цілі, доки активні. + - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив'язати дочірню гілку через `--thread auto|here`. - Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися більше про поведінку прив’язки. + Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив'язок. - Режим сповіщень про реакції для кожної гільдії: + Режим сповіщень про реакції для окремої гільдії: - `off` - - `own` (за замовчуванням) + - `own` (типово) - `all` - `allowlist` (використовує `guilds..users`) - Події реакцій перетворюються на системні події та приєднуються до маршрутизованого сеансу Discord. + Події реакцій перетворюються на системні події та додаються до маршрутизованого сеансу Discord. @@ -778,15 +778,15 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - Discord приймає unicode-емодзі або назви власних емодзі. + - Discord приймає Unicode-емодзі або назви власних емодзі. - Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису. - Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням. + Записи конфігурації, ініційовані каналом, увімкнено типово. - Це впливає на потоки `/config set|unset` (коли командні функції ввімкнені). + Це впливає на потоки `/config set|unset` (коли функції команд увімкнено). Вимкнути: @@ -803,7 +803,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - Маршрутизуйте WebSocket-трафік Discord gateway і стартові REST-пошуки (ID застосунку + розпізнавання списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. + Маршрутизуйте трафік WebSocket Gateway Discord і початкові REST-пошуки (ID застосунку + розпізнавання списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. ```json5 { @@ -853,7 +853,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - списки дозволених можуть використовувати `pk:` - відображувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошуки використовують ID початкового повідомлення та обмежені часовим вікном + - пошуки використовують ID оригінального повідомлення та обмежені часовим вікном - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не встановлено @@ -900,16 +900,16 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Мапа типів активності: + Карта типів активності: - 0: Грає - 1: Транслює (потребує `activityUrl`) - 2: Слухає - 3: Дивиться - - 4: Власна (використовує текст активності як стан статусу; емодзі необов’язковий) + - 4: Власна (використовує текст активності як стан статусу; емодзі необов'язковий) - 5: Змагається - Приклад автоматичної присутності (сигнал справності середовища виконання): + Приклад автоматичної присутності (сигнал справності runtime): ```json5 { @@ -926,7 +926,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Автоматична присутність зіставляє доступність середовища виконання зі статусом Discord: справне => online, погіршене або невідоме => idle, вичерпане або недоступне => dnd. Необов’язкові перевизначення тексту: + Автоматична присутність зіставляє доступність runtime зі статусом Discord: справний => online, погіршений або невідомий => idle, вичерпаний або недоступний => dnd. Необов'язкові перевизначення тексту: - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -934,40 +934,40 @@ Slash-команди `/model` і `/models` відкривають інтерак - - Discord підтримує обробку підтверджень на основі кнопок у DM і може необов’язково публікувати запити на підтвердження у вихідному каналі. + + Discord підтримує обробку схвалень на основі кнопок у DM і може додатково публікувати запити на схвалення в початковому каналі. Шлях конфігурації: - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`) - - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`) + - `channels.discord.execApprovals.approvers` (необов'язково; коли можливо, резервно використовує `commands.ownerAllowFrom`) + - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord автоматично вмикає нативні exec-підтвердження, коли `enabled` не задано або має значення `"auto"` і можна розпізнати принаймні одного підтверджувача з `execApprovals.approvers` або з `commands.ownerAllowFrom`. Discord не виводить exec-підтверджувачів із канального `allowFrom`, застарілого `dm.allowFrom` або `defaultTo` для прямих повідомлень. Установіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт підтверджень. + Discord автоматично вмикає нативні схвалення виконання, коли `enabled` не задано або дорівнює `"auto"` і можна розпізнати принаймні одного схвалювача з `execApprovals.approvers` або з `commands.ownerAllowFrom`. Discord не виводить схвалювачів виконання з канального `allowFrom`, застарілого `dm.allowFrom` або `defaultTo` для прямих повідомлень. Установіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт схвалень. - Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на підтвердження та фінальні результати приватно. Спочатку він пробує Discord DM, коли власник, що викликає команду, має маршрут власника Discord; якщо він недоступний, OpenClaw повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram. + Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на схвалення та фінальні результати приватно. Спочатку він пробує Discord DM, коли власник, що викликав команду, має маршрут власника Discord; якщо він недоступний, OpenClaw використовує перший доступний маршрут власника з `commands.ownerAllowFrom`, наприклад Telegram. - Коли `target` має значення `channel` або `both`, запит на підтвердження видимий у каналі. Лише розпізнані підтверджувачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на підтвердження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу не можна вивести з ключа сеансу, OpenClaw повертається до доставки через DM. + Коли `target` дорівнює `channel` або `both`, запит на схвалення видимий у каналі. Кнопки можуть використовувати лише розпізнані схвалювачі; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тому вмикайте доставлення в канал лише в довірених каналах. Якщо ID каналу не можна вивести з ключа сеансу, OpenClaw резервно використовує доставлення через DM. - Discord також відображає спільні кнопки підтвердження, які використовуються іншими чат-каналами. Нативний адаптер Discord здебільшого додає маршрутизацію DM для підтверджувачів і розсилання в канал. - Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw - має додавати ручну команду `/approve` лише тоді, коли результат інструмента каже, - що чат-підтвердження недоступні або ручне підтвердження є єдиним шляхом. - Якщо нативне середовище виконання підтверджень Discord не активне, OpenClaw залишає + Discord також відображає спільні кнопки схвалення, які використовуються іншими чат-каналами. Нативний адаптер Discord переважно додає маршрутизацію DM схвалювача та розсилання в канал. + Коли ці кнопки наявні, вони є основним UX схвалення; OpenClaw + має включати ручну команду `/approve` лише тоді, коли результат інструмента каже, + що чат-схвалення недоступні або ручне схвалення є єдиним шляхом. + Якщо нативний runtime схвалень Discord не активний, OpenClaw залишає локальну детерміновану підказку `/approve ` видимою. Якщо - середовище виконання активне, але нативну картку не можна доставити жодній цілі, + runtime активний, але нативну картку не можна доставити до жодної цілі, OpenClaw надсилає резервне сповіщення в той самий чат із точною командою `/approve` - з очікуваного підтвердження. + з очікуваного схвалення. - Автентифікація Gateway і розпізнавання підтверджень дотримуються спільного контракту клієнта Gateway (ID `plugin:` розпізнаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). За замовчуванням термін дії підтверджень спливає через 30 хвилин. + Автентифікація Gateway і розпізнавання схвалень дотримуються спільного контракту клієнта Gateway (ID `plugin:` розпізнаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Типово схвалення спливають через 30 хвилин. - Див. [Exec-підтвердження](/uk/tools/exec-approvals). + Див. [Схвалення виконання](/uk/tools/exec-approvals). -## Інструменти й контролі доступу до дій +## Інструменти та шлюзи дій Дії повідомлень Discord включають обмін повідомленнями, адміністрування каналів, модерацію, присутність і дії з метаданими. @@ -978,26 +978,26 @@ Slash-команди `/model` і `/models` відкривають інтерак - модерація: `timeout`, `kick`, `ban` - присутність: `setPresence` -Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб задати обкладинку запланованої події. +Дія `event-create` приймає необов'язковий параметр `image` (URL або локальний шлях до файлу), щоб задати зображення обкладинки запланованої події. -Контролі доступу до дій розміщуються в `channels.discord.actions.*`. +Шлюзи дій розміщуються в `channels.discord.actions.*`. -Типова поведінка контролю доступу: +Типова поведінка шлюзу: -| Група дій | Типово | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | -| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | -| roles | вимкнено | -| moderation | вимкнено | -| presence | вимкнено | +| Група дій | За замовчуванням | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | +| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | +| roles | вимкнено | +| moderation | вимкнено | +| presence | вимкнено | -## Інтерфейс компонентів v2 +## UI Components v2 -OpenClaw використовує компоненти Discord v2 для затверджень exec і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького інтерфейсу (розширено; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. +OpenClaw використовує компоненти Discord v2 для підтверджень виконання та маркерів міжконтекстного переходу. Дії з повідомленнями Discord також можуть приймати `components` для користувацького UI (розширено; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. - `channels.discord.ui.components.accentColor` задає акцентний колір, який використовують контейнери компонентів Discord (hex). -- Задавайте для кожного облікового запису через `channels.discord.accounts..ui.components.accentColor`. -- `embeds` ігноруються, коли наявні компоненти v2. +- Для окремого облікового запису задається через `channels.discord.accounts..ui.components.accentColor`. +- `embeds` ігноруються, коли присутні компоненти v2. Приклад: @@ -1017,20 +1017,20 @@ OpenClaw використовує компоненти Discord v2 для зат ## Голос -Discord має дві окремі голосові поверхні: голосові канали **в реальному часі** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду з хвильовою формою). Gateway підтримує обидві. +Discord має дві окремі голосові поверхні: голосові канали реального часу **voice channels** (безперервні розмови) та вкладення голосових повідомлень **voice message attachments** (формат попереднього перегляду хвилі). Gateway підтримує обидві. ### Голосові канали Контрольний список налаштування: 1. Увімкніть Message Content Intent у Discord Developer Portal. -2. Увімкніть Server Members Intent, коли використовуються allowlist ролей/користувачів. +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: @@ -1038,7 +1038,7 @@ Discord має дві окремі голосові поверхні: голос /vc leave ``` -Приклад автоматичного приєднання: +Приклад авто-приєднання: ```json5 { @@ -1068,33 +1068,34 @@ Discord має дві окремі голосові поверхні: голос Примітки: - `voice.tts` перевизначає `messages.tts` лише для голосового відтворення. -- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосових каналах Discord. Залиште його незаданим, щоб успадкувати модель маршрутизованого агента. +- `voice.model` перевизначає LLM, що використовується лише для відповідей голосового каналу Discord. Залиште незаданим, щоб успадкувати модель маршрутизованого агента. - STT використовує `tools.media.audio`; `voice.model` не впливає на транскрибування. -- Ходи голосового транскрипта визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`). -- Голос увімкнено типово; задайте `channels.discord.voice.enabled=false`, щоб вимкнути голосове середовище виконання та 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. +- Перевизначення Discord `systemPrompt` для окремого каналу застосовуються до ходів голосової транскрипції для цього голосового каналу. +- Ходи голосової транскрипції визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці без статусу власника не можуть отримувати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`). +- Голос увімкнено за замовчуванням; задайте `channels.discord.voice.enabled=false`, щоб вимкнути голосовий runtime і Gateway intent `GuildVoiceStates`. +- `channels.discord.intents.voiceStates` може явно перевизначити підписку на intent стану голосу. Залиште незаданим, щоб intent відповідав `voice.enabled`. +- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються до параметрів join у `@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-файл. +- Захоплення Discord PCM перетворюється на тимчасовий WAV-файл. - `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`. -- Транскрипт надсилається через ingress і маршрутизацію Discord, тоді як LLM відповіді запускається з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернути текст, оскільки голос Discord відповідає за фінальне відтворення TTS. +- Транскрипт надсилається через вхід Discord і маршрутизацію, тоді як LLM відповіді працює з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернути текст, оскільки Discord voice відповідає за фінальне TTS-відтворення. - `voice.model`, якщо задано, перевизначає лише LLM відповіді для цього ходу голосового каналу. -- `voice.tts` об’єднується поверх `messages.tts`; отримане аудіо відтворюється в каналі, до якого приєднано бота. +- `voice.tts` об’єднується поверх `messages.tts`; отримане аудіо відтворюється у приєднаному каналі. Облікові дані визначаються для кожного компонента: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`. ### Голосові повідомлення -Голосові повідомлення Discord показують попередній перегляд хвильової форми й потребують аудіо OGG/Opus. OpenClaw генерує хвильову форму автоматично, але потребує `ffmpeg` і `ffprobe` на хості gateway для перевірки та конвертації. +Голосові повідомлення Discord показують попередній перегляд хвилі та потребують аудіо OGG/Opus. OpenClaw генерує хвилю автоматично, але потребує `ffmpeg` і `ffprobe` на хості Gateway для перевірки та конвертації. - Надайте **локальний шлях до файлу** (URL відхиляються). -- Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). -- Приймається будь-який аудіоформат; OpenClaw конвертує в OGG/Opus за потреби. +- Не вказуйте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). +- Приймається будь-який аудіоформат; OpenClaw перетворює його на OGG/Opus за потреби. ```bash message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true) @@ -1103,19 +1104,19 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Усунення несправностей - + - увімкніть Message Content Intent - - увімкніть Server Members Intent, коли ви залежите від розпізнавання користувача/учасника + - увімкніть Server Members Intent, коли ви залежите від визначення користувачів/учасників - перезапустіть gateway після зміни intents - + - перевірте `groupPolicy` - - перевірте allowlist guild у `channels.discord.guilds` - - якщо існує мапа `channels` guild, дозволені лише перелічені канали + - перевірте список дозволених guild у `channels.discord.guilds` + - якщо існує мапа `channels` для guild, дозволені лише перелічені канали - перевірте поведінку `requireMention` і шаблони згадок Корисні перевірки: @@ -1128,16 +1129,16 @@ openclaw logs --follow - - Поширені причини: + + Типові причини: - - `groupPolicy="allowlist"` без відповідного allowlist guild/каналу + - `groupPolicy="allowlist"` без відповідного списку дозволених guild/каналу - `requireMention` налаштовано в неправильному місці (має бути під `channels.discord.guilds` або записом каналу) - - відправника заблоковано allowlist `users` guild/каналу + - відправник заблокований списком дозволених `users` для guild/каналу - + Типові журнали: @@ -1148,9 +1149,9 @@ openclaw logs --follow - один обліковий запис: `channels.discord.eventQueue.listenerTimeout` - кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout` - - це керує лише роботою слухача Gateway Discord, а не тривалістю ходу агента + - це керує лише роботою listener Gateway Discord, а не тривалістю ходу агента - Discord не застосовує таймаут, власником якого є канал, до поставлених у чергу ходів агента. Слухачі повідомлень передають керування негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сеансу, доки життєвий цикл сеансу/інструмента/середовища виконання не завершить або не перерве роботу. + Discord не застосовує власний для каналу timeout до поставлених у чергу ходів агента. Listeners повідомлень передають роботу негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/runtime не завершиться або не перерве роботу. ```json5 { @@ -1170,22 +1171,22 @@ openclaw logs --follow - - OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до типового URL gateway Discord і обмежуються за частотою в журналах. + + OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартного URL Gateway Discord і обмежуються за частотою в журналах. - Регулятори таймауту метаданих: + Регулятори timeout метаданих: - один обліковий запис: `channels.discord.gatewayInfoTimeoutMs` - кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs` - - резервне значення env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` - - типово: `30000` (30 секунд), максимум: `120000` + - fallback env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` + - за замовчуванням: `30000` (30 секунд), максимум: `120000` Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів. - Якщо ви використовуєте ключі slug, зіставлення під час виконання все ще може працювати, але probe не може повністю перевірити дозволи. + Якщо ви використовуєте ключі slug, зіставлення в runtime все одно може працювати, але probe не може повністю перевірити дозволи. @@ -1193,27 +1194,27 @@ openclaw logs --follow - DM вимкнено: `channels.discord.dm.enabled=false` - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) - - очікується затвердження pairing у режимі `pairing` + - очікування підтвердження pairing у режимі `pairing` - Типово повідомлення, створені ботами, ігноруються. + За замовчуванням повідомлення, створені ботом, ігноруються. - Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і allowlist, щоб уникнути циклів. - Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. + Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і списків дозволених, щоб уникнути циклічної поведінки. + Надавайте перевагу `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) @@ -1222,17 +1223,17 @@ 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` +- черга подій: `eventQueue.listenerTimeout` (бюджет listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` - метадані Gateway: `gatewayInfoTimeoutMs` - відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` -- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- streaming: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` -- медіа/повтор: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry` +- доставлення: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` +- streaming: `streaming` (застарілий alias: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- медіа/повтор: `mediaMaxMb` (обмежує вихідні завантаження Discord, за замовчуванням `100MB`), `retry` - дії: `actions.*` - presence: `activity`, `status`, `activityType`, `activityUrl` - UI: `ui.components.accentColor` @@ -1242,29 +1243,29 @@ openclaw logs --follow ## Безпека та операції -- Розглядайте токени ботів як секрети (у керованих середовищах бажано `DISCORD_BOT_TOKEN`). +- Вважайте токени ботів секретами (у керованих середовищах бажано `DISCORD_BOT_TOKEN`). - Надавайте мінімально необхідні дозволи Discord. -- Якщо deploy/стан команд застарів, перезапустіть gateway і повторно перевірте через `openclaw channels status --probe`. +- Якщо deploy/state команд застарілий, перезапустіть Gateway і перевірте знову через `openclaw channels status --probe`. ## Пов’язане - - Створіть пару між користувачем Discord і Gateway. + + Пов’яжіть користувача Discord із Gateway. - - Поведінка групового чату та allowlist. + + Поведінка групових чатів і списку дозволених. - - Спрямовуйте вхідні повідомлення до агентів. + + Маршрутизуйте вхідні повідомлення до агентів. - + Модель загроз і посилення захисту. - + Зіставляйте гільдії та канали з агентами. - - Нативна поведінка команд. + + Поведінка нативних команд.