diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index cfc78eb27..e5d81948e 100644 --- a/docs/uk/channels/discord.md +++ b/docs/uk/channels/discord.md @@ -4,69 +4,69 @@ read_when: summary: Стан підтримки бота Discord, можливості та конфігурація title: Discord x-i18n: - generated_at: "2026-05-03T18:10:20Z" + generated_at: "2026-05-03T19:16:24Z" model: gpt-5.5 provider: openai - source_hash: 7a323cd9035265d43aaf60252503a4712264e316b7da175a063bff4ec51f777d + source_hash: 84582bdf79202e996bc1e5526acefa4954c5fedc62a904c733615a325870a3fd source_path: channels/discord.md workflow: 16 --- -Готово до приватних повідомлень і каналів гільдій через офіційний Discord gateway. +Готово для приватних повідомлень і каналів гільдій через офіційний Discord gateway. - Приватні повідомлення Discord типово запускаються в режимі сполучення. + Приватні повідомлення Discord за замовчуванням переходять у режим сполучення. Нативна поведінка команд і каталог команд. - Міжканальна діагностика та процедура відновлення. + Міжканальна діагностика та потік відновлення. ## Швидке налаштування -Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і сполучити його з OpenClaw. Рекомендуємо додати бота на власний приватний сервер. Якщо у вас його ще немає, [спочатку створіть його](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**). +Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і сполучити його з OpenClaw. Ми рекомендуємо додавати бота на власний приватний сервер. Якщо у вас його ще немає, [спершу створіть його](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**). Перейдіть до [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть його, наприклад, "OpenClaw". - Натисніть **Bot** на бічній панелі. Установіть **Username** на ім'я, яким ви називаєте свого агента OpenClaw. + Натисніть **Bot** на бічній панелі. Установіть **Username** на те, як ви називаєте свого агента OpenClaw. - Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і увімкніть: + Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і ввімкніть: - - **Message Content Intent** (обов'язково) + - **Message Content Intent** (обов’язково) - **Server Members Intent** (рекомендовано; потрібно для списків дозволених ролей і зіставлення імен з ID) - - **Presence Intent** (необов'язково; потрібно лише для оновлень присутності) + - **Presence Intent** (необов’язково; потрібно лише для оновлень присутності) - Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**. + Прокрутіть сторінку **Bot** назад угору й натисніть **Reset Token**. - Попри назву, це створює ваш перший токен — нічого не "скидається." + Попри назву, це створює ваш перший токен — нічого не "скидається". - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він знадобиться вам незабаром. + Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро знадобиться. - - Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на свій сервер. + + Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на сервер. - Прокрутіть униз до **OAuth2 URL Generator** і увімкніть: + Прокрутіть униз до **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, зокрема у workflows форумних або медіаканалів, які створюють або продовжують гілку, також увімкніть **Send Messages in Threads**. - Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб під'єднати. Тепер ви маєте бачити свого бота на сервері Discord. + Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в гілках Discord, зокрема у сценаріях форумних або медіаканалів, які створюють чи продовжують гілку, також увімкніть **Send Messages in Threads**. + Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue**, щоб під’єднати. Тепер ви маєте бачити свого бота на сервері Discord. - Повернувшись у застосунок Discord, потрібно увімкнути Developer Mode, щоб копіювати внутрішні ID. + Повернувшись у застосунок Discord, потрібно ввімкнути Developer Mode, щоб копіювати внутрішні ID. - 1. Натисніть **User Settings** (значок шестерні поруч із вашим аватаром) → **Advanced** → увімкніть **Developer Mode** - 2. Клацніть правою кнопкою вашу **іконку сервера** на бічній панелі → **Copy Server ID** - 3. Клацніть правою кнопкою ваш **власний аватар** → **Copy User ID** + 1. Натисніть **User Settings** (значок шестерні біля вашого аватара) → **Advanced** → увімкніть **Developer Mode** + 2. Клацніть правою кнопкою миші **значок сервера** на бічній панелі → **Copy Server ID** + 3. Клацніть правою кнопкою миші **власний аватар** → **Copy User ID** - Збережіть свої **Server ID** і **User ID** поруч із Bot Token — на наступному кроці ви надішлете всі три до OpenClaw. + Збережіть свої **Server ID** і **User ID** поруч із Bot Token — на наступному кроці ви надішлете всі три в OpenClaw. - Щоб сполучення працювало, Discord має дозволяти вашому боту надсилати вам приватні повідомлення. Клацніть правою кнопкою вашу **іконку сервера** → **Privacy Settings** → увімкніть **Direct Messages**. + Щоб сполучення працювало, Discord має дозволити вашому боту надсилати вам приватні повідомлення. Клацніть правою кнопкою миші **значок сервера** → **Privacy Settings** → увімкніть **Direct Messages**. - Це дає змогу учасникам сервера (включно з ботами) надсилати вам приватні повідомлення. Тримайте це увімкненим, якщо хочете використовувати приватні повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали гільдій, можете вимкнути приватні повідомлення після сполучення. + Це дозволяє учасникам сервера (зокрема ботам) надсилати вам приватні повідомлення. Залиште це ввімкненим, якщо хочете використовувати приватні повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути приватні повідомлення після сполучення. - - Ваш токен бота Discord є секретом (як пароль). Задайте його на машині, де працює OpenClaw, перш ніж писати своєму агенту. + + Токен вашого бота Discord є секретом (як пароль). Задайте його на машині, де працює OpenClaw, перш ніж писати своєму агенту. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -120,9 +120,9 @@ openclaw config patch --file ./discord.patch.json5 openclaw gateway ``` - Якщо OpenClaw уже працює як фонова служба, перезапустіть його через Mac-застосунок OpenClaw або зупинивши й повторно запустивши процес `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 уже працює як фоновий сервіс, перезапустіть його через застосунок 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. @@ -130,11 +130,11 @@ openclaw gateway - Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому це. Якщо Discord — ваш перший канал, натомість скористайтеся вкладкою CLI / config. + Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / конфігурації. > "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 для облікового запису за замовчуванням: ```bash DISCORD_BOT_TOKEN=... ``` - Для скриптового або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторно запустіть без `--dry-run`. Відкриті значення `token` підтримуються. Значення SecretRef також підтримуються для `channels.discord.token` через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). + Для скриптового або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторно запустіть без `--dry-run`. Підтримуються відкриті значення `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 запуститься, а потім напишіть своєму боту в Discord приватне повідомлення. Він відповість кодом сполучення. - Надішліть код сполучення своєму агенту у вашому наявному каналі: + Надішліть код сполучення своєму агенту в наявному каналі: > "Approve this Discord pairing code: ``" @@ -214,18 +214,18 @@ openclaw pairing approve discord -Розв'язання токена враховує обліковий запис. Значення токена з конфігурації мають пріоритет над env fallback. `DISCORD_BOT_TOKEN` використовується лише для типового облікового запису. -Якщо два увімкнені облікові записи Discord розв'язуються до того самого токена бота, OpenClaw запускає лише один монітор gateway для цього токена. Токен із конфігурації має пріоритет над типовим env fallback; інакше перший увімкнений обліковий запис перемагає, а дубльований обліковий запис повідомляється як вимкнений. -Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується для цього виклику. Це стосується дій надсилання й дій стилю читання/перевірки (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису й налаштування повторних спроб усе ще беруться з вибраного облікового запису в активному runtime snapshot. +Розв’язання токенів враховує обліковий запис. Значення токена з конфігурації мають пріоритет над резервним значенням env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. +Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один монітор gateway для цього токена. Токен із конфігурації має пріоритет над резервним значенням env за замовчуванням; інакше перший увімкнений обліковий запис отримує пріоритет, а дубльований обліковий запис позначається як вимкнений. +Для розширених вихідних викликів (дії інструмента повідомлень/каналу) для цього виклику використовується явний `token` на рівні окремого виклику. Це застосовується до дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису й налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному runtime-знімку. ## Рекомендовано: налаштуйте робочий простір гільдії -Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. - Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях. + Це дає змогу вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях. @@ -255,9 +255,9 @@ openclaw pairing approve discord - Типово ваш агент відповідає в каналах гільдії лише коли його згадують через @mention. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення. + За замовчуванням ваш агент відповідає в каналах гільдії лише коли його згадують через @mention. Для приватного сервера вам, імовірно, потрібно, щоб він відповідав на кожне повідомлення. - У каналах гільдій звичайні фінальні відповіді асистента типово залишаються приватними. Видимий вивід у Discord потрібно надсилати явно за допомогою інструмента `message`, тож агент може типово лишатися спостерігачем і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. + У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно явно надсилати інструментом `message`, тож агент може за замовчуванням спостерігати й публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. @@ -280,61 +280,61 @@ openclaw pairing approve discord } ``` - Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат, задайте `messages.groupChat.visibleReplies: "automatic"`. + Щоб відновити застарілі автоматичні фінальні відповіді для групових чатів/канальних кімнат, задайте `messages.groupChat.visibleReplies: "automatic"`. - - Типово довготривала пам'ять (MEMORY.md) завантажується лише в сесіях приватних повідомлень. Канали гільдій не завантажують MEMORY.md автоматично. + + За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях приватних повідомлень. Канали гільдії не завантажують 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` або будь-що, що відповідає вашому workflow. +Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкування. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що пасує вашому робочому процесу. -## Модель виконання +## Модель runtime -- Gateway володіє підключенням Discord. -- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються в Discord. +- Gateway керує з’єднанням Discord. +- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються до Discord. - Метадані гільдії/каналу Discord додаються до підказки моделі як ненадійний - контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цю оболонку - назад, OpenClaw прибирає скопійовані метадані з вихідних відповідей і з + контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт + назад, OpenClaw вилучає скопійовані метадані з вихідних відповідей і з майбутнього контексту повторного відтворення. -- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основну сесію агента (`agent:main:main`). -- Канали гільдій мають ізольовані ключі сесій (`agent::discord:channel:`). +- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують головну сесію агента (`agent:main:main`). +- Канали гільдії мають ізольовані ключі сесій (`agent::discord:channel:`). - Групові DM за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`). -- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас зберігаючи `CommandTargetSessionKey` для спрямованої розмовної сесії. +- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), але все ще несуть `CommandTargetSessionKey` до маршрутизованої сесії розмови. - Доставка текстових оголошень cron/heartbeat до Discord використовує фінальну - видиму асистенту відповідь один раз. Медіа та структуровані payload-и компонентів залишаються - багатоповідомними, коли агент видає кілька payload-ів, придатних до доставки. + видиму асистенту відповідь один раз. Медіа та структуровані payload компонентів залишаються + багатоповідомними, коли агент видає кілька доставних payload. ## Канали форумів -Форуми та медіаканали Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення: +Форумні та медіаканали Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення: -- Надішліть повідомлення батьківському форуму (`channel:`), щоб автоматично створити тред. Назва треду використовує перший непорожній рядок вашого повідомлення. -- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для каналів форумів. +- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити тред. Заголовок треду використовує перший непорожній рядок вашого повідомлення. +- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для форумних каналів. -Приклад: надіслати до батьківського форуму, щоб створити тред +Приклад: надіслати до батьківського форуму для створення треду ```bash openclaw message send --channel discord --target channel: \ --message "Topic title\nBody of the post" ``` -Приклад: явно створити тред форуму +Приклад: явно створити форумний тред ```bash openclaw message thread create --channel discord --target channel: \ @@ -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,13 +353,13 @@ OpenClaw підтримує контейнери компонентів Discord - Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, списків вибору та форм до закінчення їхнього строку дії. +За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, списки вибору та форми кілька разів до завершення строку їх дії. -Щоб обмежити, хто може натиснути кнопку, установіть `allowedUsers` для цієї кнопки (ідентифікатори користувачів 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` для кількох файлів @@ -369,7 +369,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - Додайте `components.modal` з до 5 полями - Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` -- OpenClaw автоматично додає кнопку запуску +- OpenClaw автоматично додає кнопку-тригер Приклад: @@ -429,37 +429,37 @@ Slash-команди `/model` і `/models` відкривають інтерак - `channels.discord.dmPolicy` керує доступом DM. `channels.discord.allowFrom` є канонічним списком дозволених DM. + `channels.discord.dmPolicy` керує доступом DM. `channels.discord.allowFrom` є канонічним allowlist DM. - `pairing` (за замовчуванням) - `allowlist` - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`) - `disabled` - Якщо політика DM не є відкритою, невідомі користувачі блокуються (або отримують запит на pairing у режимі `pairing`). + Якщо політика DM не відкрита, невідомі користувачі блокуються (або їм пропонується pairing у режимі `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>` - Голі числові ідентифікатори зазвичай розпізнаються як ідентифікатори каналів, коли активне значення каналу за замовчуванням, але ідентифікатори, перелічені в ефективному DM `allowFrom` облікового запису, трактуються як цілі користувацьких DM для сумісності. + Голі числові ID зазвичай розпізнаються як ID каналів, коли активне значення каналу за замовчуванням, але ID, перелічені в ефективному DM `allowFrom` акаунта, для сумісності трактуються як цілі користувацьких DM. DM Discord можуть використовувати динамічні записи `accessGroup:` у `channels.discord.allowFrom`. - Назви груп доступу спільні для каналів повідомлень. Використовуйте `type: "message.senders"` для статичної групи, члени якої виражаються в нормальному синтаксисі `allowFrom` кожного каналу, або `type: "discord.channelAudience"`, коли поточна аудиторія `ViewChannel` каналу Discord має динамічно визначати членство. Спільну поведінку груп доступу задокументовано тут: [Групи доступу](/uk/channels/access-groups). + Назви груп доступу спільні для каналів повідомлень. Використовуйте `type: "message.senders"` для статичної групи, учасники якої виражені у звичайному синтаксисі `allowFrom` кожного каналу, або `type: "discord.channelAudience"`, коли поточна аудиторія `ViewChannel` каналу Discord має динамічно визначати учасників. Спільну поведінку груп доступу задокументовано тут: [Групи доступу](/uk/channels/access-groups). ```json5 { @@ -482,9 +482,9 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Текстовий канал Discord не має окремого списку учасників. `type: "discord.channelAudience"` моделює членство так: відправник DM є членом налаштованої гільдії та наразі має ефективний дозвіл `ViewChannel` на налаштованому каналі після застосування ролей і перевизначень каналу. + Текстовий канал Discord не має окремого списку учасників. `type: "discord.channelAudience"` моделює членство так: відправник DM є учасником налаштованої гільдії та наразі має ефективний дозвіл `ViewChannel` на налаштованому каналі після застосування ролей і перевизначень каналу. - Приклад: дозволити будь-кому, хто бачить `#maintainers`, надсилати DM боту, водночас залишаючи DM закритими для всіх інших. + Приклад: дозволити всім, хто може бачити `#maintainers`, надсилати DM боту, залишаючи DM закритими для всіх інших. ```json5 { @@ -525,9 +525,9 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Пошуки закривають доступ у разі помилки. Якщо Discord повертає `Missing Access`, пошук учасника завершується невдало або канал належить іншій гільдії, відправник DM вважається неавторизованим. + Пошуки закриті при помилці. Якщо Discord повертає `Missing Access`, пошук учасника завершується помилкою або канал належить іншій гільдії, відправник DM вважається неавторизованим. - Увімкніть **Server Members Intent** у Discord Developer Portal для бота, коли використовуєте групи доступу аудиторії каналу. DM не містять стану учасника гільдії, тому OpenClaw визначає учасника через Discord REST під час авторизації. + Увімкніть **Server Members Intent** для бота в Discord Developer Portal, коли використовуєте групи доступу на основі аудиторії каналу. DM не містять стану учасника гільдії, тому OpenClaw визначає учасника через Discord REST під час авторизації. @@ -538,16 +538,16 @@ Slash-команди `/model` і `/models` відкривають інтерак - `allowlist` - `disabled` - Безпечне базове значення, коли існує `channels.discord`, — `allowlist`. + Безпечний базовий рівень, коли існує `channels.discord`, це `allowlist`. Поведінка `allowlist`: - - гільдія має відповідати `channels.discord.guilds` (переважно `id`, slug приймається) - - необов’язкові списки дозволених відправників: `users` (рекомендовано стабільні ідентифікатори) і `roles` (лише ідентифікатори ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles` - - прямий збіг за іменем/тегом вимкнений за замовчуванням; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як режим сумісності на крайній випадок - - імена/теги підтримуються для `users`, але ідентифікатори безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменами/тегами - - якщо для гільдії налаштовано `channels`, канали не зі списку відхиляються - - якщо гільдія не має блока `channels`, дозволені всі канали в цій гільдії зі списку дозволених + - гільдія має збігатися з `channels.discord.guilds` (бажано `id`, slug приймається) + - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles` + - прямий збіг за іменем/тегом за замовчуванням вимкнений; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності + - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів + - якщо гільдія має налаштовані `channels`, канали поза списком забороняються + - якщо гільдія не має блоку `channels`, дозволяються всі канали в цій гільдії з allowlist Приклад: @@ -573,35 +573,35 @@ 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`) - - неявну поведінку reply-to-bot у підтримуваних випадках + - неявну поведінку відповіді боту в підтримуваних випадках - Під час написання вихідних повідомлень Discord використовуйте канонічний синтаксис згадок: `<@USER_ID>` для користувачів, `<#CHANNEL_ID>` для каналів і `<@&ROLE_ID>` для ролей. Не використовуйте застарілу форму згадки псевдоніма `<@!USER_ID>`. + Під час написання вихідних повідомлень Discord використовуйте канонічний синтаксис згадок: `<@USER_ID>` для користувачів, `<#CHANNEL_ID>` для каналів і `<@&ROLE_ID>` для ролей. Не використовуйте застарілу форму згадки нікнейму `<@!USER_ID>`. `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`). - `ignoreOtherMentions` необов’язково відкидає повідомлення, що згадують іншого користувача/роль, але не бота (за винятком @everyone/@here). + `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here). Групові DM: - за замовчуванням: ігноруються (`dm.groupEnabled=false`) - - необов’язковий список дозволених через `dm.groupChannels` (ідентифікатори каналів або slug-и) + - необов’язковий allowlist через `dm.groupChannels` (ID каналів або slug) ### Маршрутизація агентів на основі ролей -Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ідентифікатором ролі. Прив’язки на основі ролей приймають лише ідентифікатори ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише гільдії. Якщо прив’язка також задає інші поля відповідності (наприклад, `peer` + `guildId` + `roles`), мають збігатися всі налаштовані поля. +Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдій Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після peer- або parent-peer-прив’язок і перед прив’язками лише за гільдією. Якщо прив’язка також задає інші поля збігу (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. ```json5 { @@ -625,51 +625,51 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` -## Нативні команди та автентифікація команд +## Нативні команди та авторизація команд -- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord. +- `commands.native` за замовчуванням має значення `"auto"` й увімкнений для Discord. - Перевизначення для окремого каналу: `channels.discord.commands.native`. -- `commands.native=false` пропускає реєстрацію команд зі скісною рискою Discord і очищення під час запуску. Раніше зареєстровані команди можуть залишатися видимими в Discord, доки ви не видалите їх із застосунку Discord. -- Автентифікація нативних команд використовує ті самі списки дозволених і політики Discord, що й звичайна обробка повідомлень. -- Команди все ще можуть бути видимими в інтерфейсі Discord для користувачів без авторизації; виконання все одно застосовує автентифікацію OpenClaw і повертає "not authorized". +- `commands.native=false` пропускає реєстрацію й очищення slash-команд Discord під час запуску. Раніше зареєстровані команди можуть залишатися видимими в Discord, доки ви не видалите їх із застосунку Discord. +- Автентифікація нативних команд використовує ті самі allowlist-и/політики Discord, що й звичайна обробка повідомлень. +- Команди можуть залишатися видимими в інтерфейсі Discord для користувачів, які не авторизовані; виконання все одно застосовує автентифікацію OpenClaw і повертає "not authorized". -Див. [Команди зі скісною рискою](/uk/tools/slash-commands) для каталогу команд і їхньої поведінки. +Див. [Slash-команди](/uk/tools/slash-commands), щоб переглянути каталог команд і поведінку. -Налаштування команд зі скісною рискою за замовчуванням: +Стандартні налаштування slash-команд: - `ephemeral: true` ## Відомості про функції - - Discord підтримує теги відповідей у виводі агента: + + Discord підтримує теги відповіді у виводі агента: - `[[reply_to_current]]` - `[[reply_to:]]` - Керується параметром `channels.discord.replyToMode`: + Керується `channels.discord.replyToMode`: - - `off` (за замовчуванням) + - `off` (типово) - `first` - `all` - `batched` - Примітка: `off` вимикає неявне створення гілок відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються. - `first` завжди додає неявне посилання на нативну відповідь до першого вихідного повідомлення Discord у ході цього звернення. - `batched` додає неявне посилання Discord на нативну відповідь лише тоді, коли - вхідне звернення було відкладеним пакетом із кількох повідомлень. Це корисно, + Примітка: `off` вимикає неявне групування відповідей у гілки. Явні теги `[[reply_to_*]]` усе одно враховуються. + `first` завжди додає неявне нативне посилання відповіді до першого вихідного повідомлення Discord для цього ходу. + `batched` додає неявне нативне посилання відповіді Discord лише тоді, коли + вхідний хід був debounced-пакетом із кількох повідомлень. Це корисно, коли нативні відповіді потрібні переважно для неоднозначних швидких чатів, а не для кожного - звернення з одним повідомленням. + ходу з одним повідомленням. - Ідентифікатори повідомлень доступні в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. + Ідентифікатори повідомлень виводяться в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. - - 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 швидко впираються в обмеження частоти, коли кілька ботів або Gateway спільно використовують один обліковий запис. + Типовим залишається `off`, оскільки редагування попереднього перегляду в Discord швидко впираються в обмеження частоти, коли кілька ботів або Gateway спільно використовують один обліковий запис. ```json5 { @@ -687,22 +687,22 @@ Slash-команди `/model` і `/models` відкривають інтерак ``` - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. - - `block` надсилає фрагменти розміром із чернетку (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). - - Медіа, помилки та фінальні відповіді з явною відповіддю скасовують очікувані редагування попереднього перегляду. - - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. + - `block` виводить фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, з обмеженням до `textChunkLimit`). + - Медіа, помилки та фінальні відповіді з явним reply скасовують очікувані редагування попереднього перегляду. + - `streaming.preview.toolProgress` (типово `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. - Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потоковий режим `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання. + Трансляція попереднього перегляду підтримує лише текст; медіавідповіді повертаються до звичайної доставки. Коли трансляцію `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної трансляції. - - Контекст історії сервера: + + Контекст історії guild: - - `channels.discord.historyLimit` за замовчуванням `20` - - резервний варіант: `messages.groupChat.historyLimit` + - `channels.discord.historyLimit` типово `20` + - резервне значення: `messages.groupChat.historyLimit` - `0` вимикає - Керування історією приватних повідомлень: + Керування історією DM: - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` @@ -710,25 +710,25 @@ Slash-команди `/model` і `/models` відкривають інтерак Поведінка гілок: - Гілки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. - - Сеанси гілок успадковують вибір `/model` на рівні сеансу батьківського каналу як резервний варіант лише для моделі; локальні для гілки вибори `/model` усе одно мають пріоритет, а історія батьківської транскрипції не копіюється, якщо не ввімкнено успадкування транскрипції. - - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових автогілок початкове наповнення з батьківської транскрипції. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`. - - Реакції інструмента повідомлень можуть розв’язувати цілі DM `user:`. + - Сеанси гілок успадковують вибір `/model` рівня сеансу батьківського каналу як резервний варіант лише для моделі; локальні для гілки вибори `/model` усе одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо успадкування транскрипту не ввімкнено. + - `channels.discord.thread.inheritParent` (типово `false`) дозволяє новим авто-гілкам починати з транскрипту батьківського каналу. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`. + - Реакції інструмента повідомлень можуть розпізнавати DM-цілі `user:`. - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді. - Теми каналів додаються як **ненадійний** контекст. Списки дозволених обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту. + Теми каналів додаються як **ненадійний** контекст. Allowlists обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту. - - Discord може прив’язати гілку до цільового сеансу, щоб подальші повідомлення в цій гілці й далі маршрутизувалися до того самого сеансу (зокрема сеансів субагентів). + + Discord може прив'язати гілку до цілі сеансу, щоб подальші повідомлення в цій гілці й надалі маршрутизувалися до того самого сеансу (включно із сеансами субагентів). Команди: - - `/focus ` прив’язати поточну/нову гілку до цілі субагента/сеансу - - `/unfocus` прибрати прив’язку поточної гілки - - `/agents` показати активні запуски та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне скасування фокуса через неактивність для сфокусованих прив’язок - - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок + - `/focus ` прив'язати поточну/нову гілку до цілі субагента/сеансу + - `/unfocus` видалити прив'язку поточної гілки + - `/agents` показати активні запуски та стан прив'язки + - `/session idle ` переглянути/оновити авто-unfocus через неактивність для сфокусованих прив'язок + - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив'язок Конфігурація: @@ -757,19 +757,19 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - `session.threadBindings.*` задає глобальні значення за замовчуванням. + - `session.threadBindings.*` задає глобальні типові значення. - `channels.discord.threadBindings.*` перевизначає поведінку Discord. - - `spawnSessions` керує автоматичним створенням/прив’язкою гілок для `sessions_spawn({ thread: true })` і створень гілок ACP. За замовчуванням: `true`. - - `defaultSpawnContext` керує нативним контекстом субагента для створень, прив’язаних до гілки. За замовчуванням: `"fork"`. - - Застарілі ключі `spawnSubagentSessions`/`spawnAcpSessions` мігруються командою `openclaw doctor --fix`. - - Якщо прив’язки гілок вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки гілок недоступні. + - `spawnSessions` керує автоматичним створенням/прив'язуванням гілок для `sessions_spawn({ thread: true })` і створень гілок ACP. Типово: `true`. + - `defaultSpawnContext` керує нативним контекстом субагента для створень, прив'язаних до гілки. Типово: `"fork"`. + - Застарілі ключі `spawnSubagentSessions`/`spawnAcpSessions` мігруються через `openclaw doctor --fix`. + - Якщо прив'язки гілок вимкнені для облікового запису, `/focus` і пов'язані операції прив'язки гілок недоступні. Див. [Субагенти](/uk/tools/subagents), [Агенти ACP](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference). - - Для стабільних «завжди ввімкнених» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, що націлюються на розмови Discord. + + Для стабільних, постійно активних робочих просторів ACP налаштуйте типізовані прив'язки ACP верхнього рівня, націлені на розмови Discord. Шлях конфігурації: @@ -825,19 +825,19 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - `/acp spawn codex --bind here` прив’язує поточний канал або гілку на місці й утримує майбутні повідомлення в тому самому сеансі ACP. Повідомлення гілки успадковують прив’язку батьківського каналу. - - У прив’язаному каналі або гілці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив’язки гілок можуть перевизначати розв’язання цілі, доки вони активні. - - `spawnSessions` обмежує створення/прив’язку дочірніх гілок через `--thread auto|here`. + - `/acp spawn codex --bind here` прив'язує поточний канал або гілку на місці й залишає майбутні повідомлення в тому самому сеансі ACP. Повідомлення гілки успадковують прив'язку батьківського каналу. + - У прив'язаному каналі або гілці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив'язки гілок можуть перевизначати розпізнавання цілі, доки активні. + - `spawnSessions` керує створенням/прив'язуванням дочірніх гілок через `--thread auto|here`. - Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив’язок. + Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив'язок. - - Режим сповіщень про реакції для кожного сервера: + + Режим сповіщень про реакції для окремого guild: - `off` - - `own` (за замовчуванням) + - `own` (типово) - `all` - `allowlist` (використовує `guilds..users`) @@ -845,27 +845,27 @@ Slash-команди `/model` і `/models` відкривають інтерак - - `ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. + + `ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення. - Порядок розв’язання: + Порядок визначення: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") + - резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: - - Discord приймає Unicode-емодзі або назви користувацьких емодзі. + - Discord приймає unicode emoji або назви користувацьких emoji. - Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису. - - Записи конфігурації, ініційовані каналом, увімкнено за замовчуванням. + + Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням. - Це впливає на потоки `/config set|unset` (коли функції команд увімкнено). + Це впливає на потоки `/config set|unset` (коли функції команд увімкнені). Вимкнення: @@ -881,8 +881,8 @@ Slash-команди `/model` і `/models` відкривають інтерак - - Маршрутизуйте WebSocket-трафік Gateway Discord і стартові REST-запити (ідентифікатор застосунку + розв’язання списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. + + Спрямовуйте WebSocket-трафік Gateway Discord і стартові REST-запити (ID застосунку + розпізнавання allowlist) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. ```json5 { @@ -912,8 +912,8 @@ Slash-команди `/model` і `/models` відкривають інтерак - - Увімкніть розв’язання PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи: + + Увімкніть розпізнавання PluralKit, щоб зіставляти proxied-повідомлення з ідентичністю учасника системи: ```json5 { @@ -930,15 +930,15 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - списки дозволених можуть використовувати `pk:` - - відображувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошуки використовують ідентифікатор оригінального повідомлення й обмежені часовим вікном - - якщо пошук завершується невдало, проксійовані повідомлення вважаються повідомленнями ботів і відкидаються, якщо не встановлено `allowBots=true` + - allowlists можуть використовувати `pk:` + - відображувані імена учасників зіставляються за name/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` + - пошуки використовують ID оригінального повідомлення й обмежені часовим вікном + - якщо пошук не вдається, proxied-повідомлення розглядаються як повідомлення ботів і відкидаються, якщо `allowBots=true` не задано - - Використовуйте `mentionAliases`, коли агентам потрібні детерміновані вихідні згадки відомих користувачів Discord. Ключі є іменами користувачів без початкового `@`; значення є ідентифікаторами користувачів Discord. Невідомі імена, `@everyone`, `@here` і згадки всередині Markdown code spans залишаються без змін. + + Використовуйте `mentionAliases`, коли агентам потрібні детерміновані вихідні згадки для відомих користувачів Discord. Ключі є handle-ами без початкового `@`; значення є ID користувачів Discord. Невідомі handle-и, `@everyone`, `@here` і згадки всередині code span-ів Markdown залишаються без змін. ```json5 { @@ -961,8 +961,8 @@ Slash-команди `/model` і `/models` відкривають інтерак - - Оновлення присутності застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте автоприсутність. + + Оновлення presence застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте auto presence. Приклад лише зі статусом: @@ -976,7 +976,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Приклад активності (користувацький статус є типом активності за замовчуванням): + Приклад активності (користувацький статус є типовим типом активності): ```json5 { @@ -989,7 +989,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Приклад потокової трансляції: + Приклад трансляції: ```json5 { @@ -1003,16 +1003,16 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Мапа типів активності: + Карта типів активності: - 0: Грає - 1: Транслює (потребує `activityUrl`) - 2: Слухає - 3: Дивиться - - 4: Користувацька (використовує текст активності як стан статусу; емодзі необов’язковий) + - 4: Користувацька (використовує текст активності як стан статусу; emoji необов'язковий) - 5: Змагається - Приклад автоприсутності (сигнал стану середовища виконання): + Приклад auto presence (сигнал стану runtime): ```json5 { @@ -1029,7 +1029,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Автоприсутність зіставляє доступність середовища виконання зі статусом Discord: healthy => online, degraded чи unknown => idle, exhausted чи unavailable => dnd. Необов’язкові перевизначення тексту: + Auto presence зіставляє доступність runtime зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов'язкові перевизначення тексту: - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -1037,70 +1037,70 @@ Slash-команди `/model` і `/models` відкривають інтерак - - Discord підтримує обробку затверджень за допомогою кнопок у DM і може за бажанням публікувати запити на затвердження у вихідному каналі. + + Discord підтримує обробку підтверджень через кнопки в DM і може необов'язково публікувати запити на підтвердження в початковому каналі. Шлях конфігурації: - `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 автоматично вмикає нативні затвердження виконання, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного затверджувача: або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить затверджувачів виконання з `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; якщо він недоступний, використовується перший доступний маршрут власника з `commands.ownerAllowFrom`, наприклад Telegram. + Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на підтвердження та фінальні результати приватно. Спершу він пробує Discord DM, коли власник, який викликає команду, має маршрут власника Discord; якщо він недоступний, використовується перший доступний маршрут власника з `commands.ownerAllowFrom`, наприклад Telegram. - Коли `target` має значення `channel` або `both`, запит на затвердження видно в каналі. Кнопки можуть використовувати лише визначені затверджувачі; інші користувачі отримують ефемерну відмову. Запити на затвердження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо отримати з ключа сесії, OpenClaw повертається до доставки через DM. + Коли `target` має значення `channel` або `both`, запит на підтвердження видимий у каналі. Кнопками можуть користуватися лише визначені затверджувачі; інші користувачі отримують ефемерну відмову. Запити на підтвердження містять текст команди, тому вмикайте доставлення в канал лише в довірених каналах. Якщо ID каналу неможливо отримати з ключа сесії, OpenClaw повертається до доставлення через DM. - Discord також рендерить спільні кнопки затвердження, які використовують інші чат-канали. Нативний адаптер Discord здебільшого додає маршрутизацію DM для затверджувачів і розсилання в канал. - Коли ці кнопки присутні, вони є основним UX затвердження; OpenClaw - має включати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє, - що чат-затвердження недоступні або ручне затвердження є єдиним шляхом. - Якщо нативне середовище затвердження Discord не активне, OpenClaw залишає - локальний детермінований запит `/approve ` видимим. Якщо - середовище активне, але нативну картку неможливо доставити жодній цілі, - OpenClaw надсилає резервне сповіщення в той самий чат із точною командою `/approve` - з очікуваного затвердження. + Discord також відображає спільні кнопки підтвердження, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для затверджувачів і розсилання в канали. + Коли ці кнопки наявні, вони є основним UX підтвердження; OpenClaw + має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, + що чат-підтвердження недоступні або ручне підтвердження є єдиним шляхом. + Якщо нативне середовище виконання підтверджень Discord не активне, OpenClaw залишає + локальну детерміновану підказку `/approve ` видимою. Якщо + середовище виконання активне, але нативну картку неможливо доставити жодній цілі, + OpenClaw надсилає в той самий чат резервне повідомлення з точною командою `/approve` + з очікуваного підтвердження. - Автентифікація Gateway і визначення затвердження дотримуються спільного контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Типово затвердження спливають через 30 хвилин. + Автентифікація Gateway і визначення підтверджень дотримуються спільного контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID — через `exec.approval.resolve`). Підтвердження типово спливають через 30 хвилин. - Див. [Затвердження виконання](/uk/tools/exec-approvals). + Див. [Підтвердження виконання](/uk/tools/exec-approvals). ## Інструменти та шлюзи дій -Дії повідомлень Discord включають обмін повідомленнями, адміністрування каналів, модерацію, присутність і дії з метаданими. +Дії повідомлень Discord включають повідомлення, адміністрування каналів, модерацію, присутність і дії з метаданими. Основні приклади: -- обмін повідомленнями: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` +- повідомлення: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` - реакції: `react`, `reactions`, `emojiList` - модерація: `timeout`, `kick`, `ban` - присутність: `setPresence` -Дія `event-create` приймає необов’язковий параметр `image` (URL або локальний шлях до файлу), щоб установити зображення обкладинки запланованої події. +Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файла), щоб установити зображення обкладинки запланованої події. Шлюзи дій розташовані в `channels.discord.actions.*`. Типова поведінка шлюзів: -| Група дій | Типово | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | -| roles | вимкнено | -| moderation | вимкнено | -| presence | вимкнено | +| Група дій | Типово | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | +| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | +| roles | вимкнено | +| moderation | вимкнено | +| presence | вимкнено | -## UI компонентів v2 +## UI Components v2 -OpenClaw використовує компоненти Discord v2 для затверджень виконання та маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для кастомного UI (розширений режим; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. +OpenClaw використовує Discord components 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` ігноруються, коли наявні components v2. Приклад: @@ -1120,20 +1120,20 @@ OpenClaw використовує компоненти Discord v2 для зат ## Голос -Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвилі). Gateway підтримує обидві. +Discord має дві окремі голосові поверхні: голосові канали реального часу **voice channels** (безперервні розмови) і **voice message attachments** (формат попереднього перегляду хвилі). Gateway підтримує обидві. ### Голосові канали Контрольний список налаштування: 1. Увімкніть Message Content Intent у Discord Developer Portal. -2. Увімкніть Server Members Intent, коли використовуються списки дозволених ролей/користувачів. +2. Увімкніть Server Members Intent, коли використовуються allowlist ролей/користувачів. 3. Запросіть бота зі scope `bot` і `applications.commands`. 4. Надайте Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі. 5. Увімкніть нативні команди (`commands.native` або `channels.discord.commands.native`). 6. Налаштуйте `channels.discord.voice`. -Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує типового агента акаунта й дотримується тих самих правил списків дозволених і групової політики, що й інші команди Discord. +Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує типового агента облікового запису та дотримується тих самих правил allowlist і групової політики, що й інші команди Discord. ```bash /vc join channel: @@ -1173,34 +1173,34 @@ Discord має дві окремі голосові поверхні: realtime * Примітки: - `voice.tts` перевизначає `messages.tts` лише для голосового відтворення. -- `voice.model` перевизначає LLM, що використовується лише для відповідей голосового каналу Discord. Залиште незаданим, щоб успадкувати модель маршрутизованого агента. +- `voice.model` перевизначає LLM, який використовується лише для відповідей голосового каналу Discord. Залиште незаданим, щоб успадкувати модель маршрутизованого агента. - STT використовує `tools.media.audio`; `voice.model` не впливає на транскрипцію. - Перевизначення `systemPrompt` для окремого каналу Discord застосовуються до ходів голосової транскрипції для цього голосового каналу. -- Ходи голосової транскрипції визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримати доступ до інструментів лише для власника (наприклад `gateway` і `cron`). -- Голос Discord є opt-in для конфігурацій лише з текстом; установіть `channels.discord.voice.enabled=true` (або залиште наявний блок `channels.discord.voice`), щоб увімкнути команди `/vc`, голосове середовище та Gateway intent `GuildVoiceStates`. -- `channels.discord.intents.voiceStates` може явно перевизначити підписку на voice-state intent. Залиште незаданим, щоб intent відповідав ефективному ввімкненню голосу. -- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються до параметрів приєднання `@discordjs/voice`. +- Ходи голосової транскрипції визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); спікери, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад `gateway` і `cron`). +- Голос Discord є opt-in для текстових конфігурацій; установіть `channels.discord.voice.enabled=true` (або залиште наявний блок `channels.discord.voice`), щоб увімкнути команди `/vc`, голосове середовище виконання та intent Gateway `GuildVoiceStates`. +- `channels.discord.intents.voiceStates` може явно перевизначити підписку на intent стану голосу. Залиште незаданим, щоб intent відповідав ефективному ввімкненню голосу. +- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються в параметри приєднання `@discordjs/voice`. - Типові значення `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано. - `voice.connectTimeoutMs` керує початковим очікуванням Ready `@discordjs/voice` для `/vc join` і спроб автоматичного приєднання. Типово: `30000`. -- `voice.reconnectGraceMs` керує тим, як довго OpenClaw чекає, доки від’єднана голосова сесія почне повторне підключення, перш ніж знищити її. Типово: `15000`. -- OpenClaw також відстежує помилки розшифрування прийому й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись після повторних помилок у короткому вікні. -- Якщо після оновлення журнали прийому повторно показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить upstream-виправлення padding з discord.js PR #11449, яке закрило issue discord.js #11419. +- `voice.reconnectGraceMs` керує тим, як довго OpenClaw чекає, поки від’єднана голосова сесія почне повторне підключення перед її знищенням. Типово: `15000`. +- 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`. -- Транскрипт надсилається через вхідний потік і маршрутизацію Discord, тоді як LLM відповіді працює з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернений текст, оскільки Discord voice відповідає за фінальне відтворення TTS. +- Транскрипт надсилається через вхід Discord і маршрутизацію, тоді як LLM відповіді працює з політикою voice-output, яка приховує інструмент агента `tts` і просить повернути текст, оскільки голос Discord відповідає за фінальне відтворення TTS. - `voice.model`, якщо задано, перевизначає лише LLM відповіді для цього ходу голосового каналу. -- `voice.tts` зливається поверх `messages.tts`; отримане аудіо відтворюється в приєднаному каналі. +- `voice.tts` об’єднується поверх `messages.tts`; отриманий звук відтворюється у приєднаному каналі. Облікові дані визначаються для кожного компонента: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`. ### Голосові повідомлення -Голосові повідомлення Discord показують попередній перегляд хвилі й потребують аудіо OGG/Opus. OpenClaw автоматично генерує хвилю, але потребує `ffmpeg` і `ffprobe` на хості gateway для перевірки та конвертації. +Голосові повідомлення Discord показують попередній перегляд хвилі та потребують аудіо OGG/Opus. OpenClaw генерує хвилю автоматично, але потребує `ffmpeg` і `ffprobe` на хості gateway для перевірки та конвертації. -- Надайте **локальний шлях до файлу** (URL відхиляються). +- Надайте **шлях до локального файла** (URL відхиляються). - Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). - Приймається будь-який аудіоформат; OpenClaw за потреби конвертує в OGG/Opus. @@ -1211,7 +1211,7 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Усунення несправностей - + - увімкніть Message Content Intent - увімкніть Server Members Intent, коли ви залежите від визначення користувача/учасника @@ -1219,12 +1219,12 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a - + - перевірте `groupPolicy` - - перевірте список дозволених guild у `channels.discord.guilds` - - якщо існує мапа `channels` guild, дозволені лише перелічені канали - - перевірте поведінку `requireMention` і патерни згадок + - перевірте allowlist гільдії в `channels.discord.guilds` + - якщо існує map `channels` гільдії, дозволені лише перелічені канали + - перевірте поведінку `requireMention` і шаблони згадок Корисні перевірки: @@ -1236,12 +1236,12 @@ openclaw logs --follow - + Поширені причини: - - `groupPolicy="allowlist"` без відповідного списку дозволених guild/каналу + - `groupPolicy="allowlist"` без відповідного allowlist гільдії/каналу - `requireMention` налаштовано в неправильному місці (має бути в `channels.discord.guilds` або записі каналу) - - відправника заблоковано списком дозволених `users` guild/каналу + - відправника заблоковано allowlist `users` гільдії/каналу @@ -1252,13 +1252,13 @@ openclaw logs --follow - `Slow listener detected ...` - `stuck session: sessionKey=agent:...:discord:... state=processing ...` - Налаштування черги Discord gateway: + Регулятори черги Gateway Discord: - - один акаунт: `channels.discord.eventQueue.listenerTimeout` - - кілька акаунтів: `channels.discord.accounts..eventQueue.listenerTimeout` - - це керує лише роботою слухача Discord gateway, а не тривалістю ходу агента + - один обліковий запис: `channels.discord.eventQueue.listenerTimeout` + - кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout` + - це керує лише роботою слухача Gateway Discord, а не часом життя ходу агента - Discord не застосовує timeout, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень передають роботу негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища не завершить або не перерве роботу. + Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень одразу передають роботу далі, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища виконання не завершить або не перерве роботу. ```json5 { @@ -1278,38 +1278,38 @@ 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` + - один обліковий запис: `channels.discord.gatewayInfoTimeoutMs` + - кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs` + - резервне значення env, коли конфіг не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` - типово: `30000` (30 секунд), максимум: `120000` - - OpenClaw очікує події `READY` Gateway Discord під час запуску та після повторних підключень у runtime. Налаштування з кількома обліковими записами та рознесенням запуску в часі можуть потребувати довшого стартового вікна READY, ніж типове. + + OpenClaw чекає на подію `READY` Gateway Discord під час запуску та після повторних підключень у runtime. Налаштування з кількома обліковими записами й рознесенням запуску можуть потребувати довшого вікна READY під час запуску, ніж стандартне. Параметри тайм-ауту READY: - - запуск для одного облікового запису: `channels.discord.gatewayReadyTimeoutMs` - - запуск для кількох облікових записів: `channels.discord.accounts..gatewayReadyTimeoutMs` - - fallback через env під час запуску, коли config не задано: `OPENCLAW_DISCORD_READY_TIMEOUT_MS` - - типове значення запуску: `15000` (15 секунд), максимум: `120000` - - runtime для одного облікового запису: `channels.discord.gatewayRuntimeReadyTimeoutMs` - - runtime для кількох облікових записів: `channels.discord.accounts..gatewayRuntimeReadyTimeoutMs` - - fallback через env у runtime, коли config не задано: `OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS` - - типове значення runtime: `30000` (30 секунд), максимум: `120000` + - запуск з одним обліковим записом: `channels.discord.gatewayReadyTimeoutMs` + - запуск із кількома обліковими записами: `channels.discord.accounts..gatewayReadyTimeoutMs` + - резервне значення env під час запуску, коли конфігурацію не задано: `OPENCLAW_DISCORD_READY_TIMEOUT_MS` + - стандарт запуску: `15000` (15 секунд), максимум: `120000` + - runtime з одним обліковим записом: `channels.discord.gatewayRuntimeReadyTimeoutMs` + - runtime з кількома обліковими записами: `channels.discord.accounts..gatewayRuntimeReadyTimeoutMs` + - резервне значення env у runtime, коли конфігурацію не задано: `OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS` + - стандарт runtime: `30000` (30 секунд), максимум: `120000` - Перевірки дозволів `channels status --probe` працюють лише для числових ідентифікаторів каналів. + Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів. - Якщо ви використовуєте ключі-slug, зіставлення в runtime все ще може працювати, але probe не може повністю перевірити дозволи. + Якщо ви використовуєте slug-ключі, зіставлення в runtime все одно може працювати, але probe не може повністю перевірити дозволи. @@ -1317,27 +1317,50 @@ openclaw logs --follow - DM вимкнено: `channels.discord.dm.enabled=false` - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) - - очікується схвалення сполучення в режимі `pairing` + - очікування схвалення сполучення в режимі `pairing` - - Типово повідомлення, створені ботами, ігноруються. + + За замовчуванням повідомлення, створені ботами, ігноруються. - Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте суворі правила згадування та allowlist, щоб уникнути циклічної поведінки. - Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. + Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і allowlist, щоб уникнути циклічної поведінки. + Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. + +```json5 +{ + channels: { + discord: { + accounts: { + mantis: { + // Mantis listens to other bots only when they mention her. + allowBots: "mentions", + }, + molty: { + // Molty listens to all bot-authored Discord messages. + allowBots: true, + mentionAliases: { + // Lets Molty write "@Mantis" and send a real Discord mention. + Mantis: "MANTIS_DISCORD_USER_ID", + }, + }, + }, + }, + }, +} +``` - + - - підтримуйте 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` - - якщо помилки тривають після автоматичного повторного приєднання, зберіть журнали та порівняйте з історією отримання DAVE в upstream у [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) @@ -1346,7 +1369,7 @@ openclaw logs --follow Основний довідник: [Довідник конфігурації - Discord](/uk/gateway/config-channels#discord). - + - запуск/auth: `enabled`, `token`, `accounts.*`, `allowBots` - політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` @@ -1355,20 +1378,20 @@ openclaw logs --follow - Gateway: `gatewayInfoTimeoutMs`, `gatewayReadyTimeoutMs`, `gatewayRuntimeReadyTimeoutMs` - відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` -- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry` +- streaming: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, стандарт `100MB`), `retry` - дії: `actions.*` - присутність: `activity`, `status`, `activityType`, `activityUrl` - UI: `ui.components.accentColor` -- функції: `threadBindings`, верхньорівневі `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` +- функції: `threadBindings`, верхньорівневий `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` -## Безпека й експлуатація +## Безпека та операції -- Обробляйте токени ботів як секрети (`DISCORD_BOT_TOKEN` бажано в контрольованих середовищах). -- Надавайте Discord дозволи за принципом найменших привілеїв. -- Якщо розгортання/стан команд застаріли, перезапустіть Gateway і повторно перевірте за допомогою `openclaw channels status --probe`. +- Розглядайте токени ботів як секрети (у керованих середовищах бажано `DISCORD_BOT_TOKEN`). +- Надавайте мінімально необхідні дозволи Discord. +- Якщо розгортання/стан команд застаріли, перезапустіть Gateway і повторно перевірте через `openclaw channels status --probe`. ## Пов’язане @@ -1377,10 +1400,10 @@ openclaw logs --follow Сполучіть користувача Discord із Gateway. - Груповий чат і поведінка allowlist. + Поведінка групового чату та allowlist. - Спрямовуйте вхідні повідомлення до агентів. + Маршрутизуйте вхідні повідомлення до агентів. Модель загроз і посилення захисту. @@ -1389,6 +1412,6 @@ openclaw logs --follow Зіставляйте guilds і канали з агентами. - Нативна поведінка команд. + Поведінка нативних команд.