Настройка Дискорда
Агент Hermes интегрируется с Discord в качестве бота, что позволяет вам общаться с вашим AI-ассистентом через личные сообщения или каналы сервера. Бот получает ваши сообщения, обрабатывает их через конвейер Hermes Agent (включая использование инструментов, памяти и рассуждений) и отвечает в кратчайшие сроки. Он поддерживает текст, голосовые сообщения, файлы вложений и слеш-команды.
Перед настройкой, вот та часть, которую большинство людей хотят знать: как Hermes ведет себя, оказавшись на вашем экране.
Как себя ведет Hermes
| Контекст | Поведение |
|---|---|
| ЛС | Hermes отвечает за каждое сообщение. @упоминание не требуется. Каждая ЛС имеет свою собственную сессию. |
| Каналы сервера | По умолчанию Hermes отвечает только тогда, когда вы @упоминаете его. Если вы пишете в канале без упоминаний, Hermes игнорирует сообщение. |
| Каналы свободного ответа | Вы можете сделать ссылки без ссылок с помощью DISCORD_FREE_RESPONSE_CHANNELS или отключить глобальные ссылки с помощью DISCORD_REQUIRE_MENTION=false. Сообщения на этих каналах производятся встроенно — автотреды о создании канала легко стабильным чатом. |
| Треды | Hermes отвечает в том же треде. Правила упоминаний все еще соблюдают, если только этот тред или его родительский канал не настроены как свободный ответ. Треды изолированы от родительского канала для истории сессии. |
| Общие контакты с несколькими пользователями | По умолчанию Hermes изолирует историю сеанса для каждого пользовательского канала внутри в целях безопасности и ясности. Два человека, разговаривающие в одном канале, не делят одну стенограмму, если вы явно не отключите ее. |
| Сообщения, упоминающие других пользователей | Когда DISCORD_IGNORE_NO_MENTION равно true (по умолчанию), Hermes молчит, если сообщение @упоминает другие пользователи, но не упоминает бота. Это собственное вмешательство бота в разговоры, адресованные другим людям. Установите «false», если хотите, чтобы бот проверял все сообщения независимо от того, кто упомянут. Это применимо только к каналам сервера, а не к ЛС. |
Если вам нужен обычный канал поддержки бота, где люди могут общаться с Hermes без необходимости каждый раз, когда его тегают, добавьте этот канал в DISCORD_FREE_RESPONSE_CHANNELS. |
|
| ### Модель шлюза Discord |
Hermes в Discord — это не вебхук, который отвечает без сохранения состояния. Он работает через полный шлюз обмена сообщениями, что означает, что каждое входящее сообщение проходит через:
- авторизация (
DISCORD_ALLOWED_USERS) - проверки подлинности / свободный ответ
- сеанс поиска
- загрузку стенограммы сессии
- Обычное выполнение агентом Hermes, включая инструменты, память и слеш-команды.
- Доставка ответа обратно в Discord
Это важно, потому что поведение в загруженном пространстве зависит как от маршрутизации Discord, так и от политических сессий Hermes.
Модель сессий в Discord
По умолчанию:
- каждый ЛС получает свою собственную сессию
- каждый тред-сервер получает свое собственное пространство имен сессии
- Каждый пользователь в общем канале получает свою собственную сессию внутри этого канала
Таким образом, если Алиса и Боб оба общаются с Hermesом в #research, Hermes по умолчанию обрабатывает их как эмбриональные разговоры, даже если они используют один и тот же видимый канал Discord.
Это контролируется в config.yaml:
group_sessions_per_user: true
Установите «false», только если вы явно хотите один общий разговор для всей комнаты:
group_sessions_per_user: false
Общие сессии могут быть полезны для совместной комнаты, но они также означают:
- пользователи делят рост контекста и затраты на токены
- длительная задача с большим количеством инструментов одного человека может раздуть контекст для всех остальных
- выполняющийся запрос одного человека может прервать последующий запрос другого человека в той же комнате
Прерывания и параллелизм
Hermes отслеживает работающих агентов по ключу сессии.
При значении по умолчанию group_sessions_per_user: true:
- Алиса, прерывающая свой собственный выполняющийся запрос, влияет только на сессию Алисы в этом канале
- Боб может продолжать разговор в том же канале, не наследуя историю Алисы и не прерывая выполнение Алисы
При group_sessions_per_user: false:
- вся комната делит один слот работающего агента для этого канала/треда
- последующие сообщения от разных людей могут прерывать или ставиться в очередь друг за другом
Это руководство проведет вас через весь процесс настройки — от создания бота на портале разработчиков Discord до отправки первого сообщения.
Шаг 1: Создайте приложение Discord
- Перейдите на Портал разработчиков Discord и войдите в свою учетную запись Discord.
- Нажмите New Application в правом верхнем углу.
- Введите имя для вашего приложения (например, "Hermes Agent") и примите Условия предоставления услуг разработчика.
- Нажмите Create.
Вы попадете на страницу General Information. Запомните Application ID — он понадобится вам позже для создания URL приглашения.
Шаг 2: Создайте бота
- На левой боковой панели нажмите Bot.
- Discord автоматически создает пользователя-бота для вашего приложения. Вы увидите имя пользователя бота, которое можно настроить.
- В разделе Authorization Flow:
- Установите Public Bot в ON — требуется для использования предоставленной Discord ссылки приглашения (рекомендуется). Это позволяет вкладке Installation генерировать URL авторизации по умолчанию.
- Оставьте Require OAuth2 Code Grant в положении OFF.Для получения дополнительной информации о защите вашего развертывания Агент Hermes см. Руководство по безопасности.
💡 Tip
На этой странице вы можете установить пользовательский аватар и баннер для вашего бота. Это то, что пользователи увидят в Discord.:::ℹ️ Info
[Альтернатива приватного бота] Если вы предпочитаете оставить бота приватным (Public Bot = OFF), вы должны использовать метод Manual URL на шаге 5 вместо вкладки Installation. Ссылка, предоставленная Discord, требует, чтобы Public Bot был включен.Шаг 3: Включите привилегированные намерения шлюза
Это самый важный шаг во всей настройке. Без включенных правильных намерений ваш бот подключится к Discord, но не сможет читать содержимое сообщений.
На странице Bot прокрутите вниз до Privileged Gateway Intents. Вы увидите три переключателя:
Намерение Назначение Обязательно? Presence Intent Видеть статус пользователя (онлайн/офлайн) Необязательно Server Members Intent Доступ к списку участников, разрешение имен пользователей Обязательно Message Content Intent Читать текстовое содержимое сообщений Обязательно Включите оба намерения: Server Members Intent и Message Content Intent, переключив их в ON.
- Без Message Content Intent ваш бот получает события сообщений, но текст сообщения пуст — бот буквально не видит, что вы напечатали.
- Без Server Members Intent бот не может разрешить имена пользователей для списка разрешенных пользователей и может не определить, кто ему пишет.Относительно количества серверов:
⚠️ Warning
[Это причина №1, по которой боты Discord не работают] Если ваш бот онлайн, но никогда не отвечает на сообщения, Message Content Intent почти наверняка отключен. Вернитесь на Портал разработчиков, выберите ваше приложение → Bot → Privileged Gateway Intents и убедитесь, что Message Content Intent включен. Нажмите Save Changes. - Если ваш бот находится менее чем на 100 серверах, вы можете свободно включать и отключать намерения.
- Если ваш бот находится на 100 или более серверах, Discord требует подать заявку на верификацию для использования привилегированных намерений. Для личного использования это не проблема.
Нажмите Save Changes внизу страницы.
Шаг 4: Получите токен бота
Токен бота — это учетные данные, которые Hermes Agent использует для входа в систему в качестве вашего бота. Все еще на странице Bot:
- В разделе Token нажмите Reset Token.
- Если у вас включена двухфакторная аутентификация в учетной записи Discord, введите код 2FA.
- Discord отобразит ваш новый токен. Скопируйте его немедленно.Храните токен в безопасном месте (например, в менеджере паролей). Он понадобится вам на шаге 8.
⚠️ Warning
[Токен отображается только один раз] Токен отображается только один раз. Если вы его потеряете, вам нужно будет сбросить его и создать новый. Никогда не делитесь токеном публично и не сохраняйте его в Git — любой, у кого есть этот токен, получает полный контроль над вашим ботом.
Шаг 5: Сгенерируйте URL приглашения
Вам нужен URL OAuth2, чтобы пригласить бота на ваш сервер. Есть два способа сделать это:
Вариант A: Использование вкладки Installation (рекомендуется)
1. На левой боковой панели нажмите Installation. 2. В разделе Installation Contexts включите Guild Install. 3. Для Install Link выберите Discord Provided Link. 4. В разделе Default Install Settings для Guild Install: - Scopes: выберите📝 Note
[Требуется Public Bot]Этот метод требует, чтобы Public Bot был установлен в ON на шаге 2. Если вы установили Public Bot в OFF, используйте метод Manual URL ниже.
botиapplications.commands- Permissions: выберите разрешения, перечисленные ниже.Вариант B: Ручной URL
Вы можете создать URL приглашения напрямую, используя этот формат:
https://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=274878286912Замените «YOUR_APP_ID» на идентификатор приложения из шага 1.
Необходимые разрешения
Это минимальные разрешения, необходимые вашему боту:
- Просмотр каналов — видеть каналы, к которым у него есть доступ
- Отправить сообщения — есть на ваши сообщения
- Встроить ссылки — форматировать расширенные ответы
- Прикрепить файлы — присылать результаты изображений, аудио и файлов.
- Читать историю сообщений — поддержка контекста разговора
Рекомендуемые дополнительные разрешения
- Отправлять сообщения в темах — есть в тредах
- Добавить реакции — создатель ответа на сообщения для подтверждения.
Целые числа разрешений
Уровень Целое число разрешений Что включено Минимальный 117760Просмотр каналов, отправка сообщений, чтение истории сообщений, прикрепление файлов Рекомендуемый 274878286912Все вышеперечисленное плюс Вставлять ссылки, отправлять сообщения в темах, добавлять реакции Шаг 6: Пригласите на свой сервер
- Откройте URL-адрес приглашения в браузере (из вкладки Установка или URL-адреса, созданного вами вручную).
- В раскрывающемся списке Добавить на сервер выберите свой сервер.
- Нажмите Продолжить, а затем Авторизовать.
- При необходимости пройдите CAPTCHA.После авторизации бот появится в списке участников вашего сервера (он будет работать в режиме офлайн, пока вы не запустите шлюз Hermes).
ℹ️ Info
Для приглашения бота на сервер Discord требуется разрешение Управление сервером. Если вы не видите свой сервер в списке, попросите администратора сервера использовать ссылку приглашения.
Шаг 7: Найдите свой идентификатор пользователя Discord
Агент Hermes использует ваш идентификатор пользователя Discord для управления темами, которые могут взаимодействовать с ним. Чтобы найти его:
- Откройте Discord (настольное приложение или веб-версия).
- Перейдите в Настройки → Дополнительно → выберите Режим разработчика в ВКЛ.
- Закройте настройки.
- Нажмите правую кнопку мыши по своему имени пользователя (в списке участников или профиле) → Копировать идентификатор пользователя.
Ваш идентификатор пользователя — это длинное число, например,
284102345871466496.💡 Tip
Режим разработчика также позволяет копировать Идентификаторы каналов и Идентификаторы серверов таким же образом — щелкните правой кнопкой мыши по имени канала или сервера и выберите «Копировать идентификатор». Идентификатор канала понадобится, если вы хотите вручную установить домашний канал.Шаг 8: Настраиваем агент Hermes
Вариант A: Интерактивная настройка (рекомендуется)
Запустите команду настройки с помощью мастера:
hermes gateway setupПри появлении запроса выберите Discord, затем вставьте токен бота и идентификатор пользователя, когда будет предложено.
Вариант Б: Ручная настройка
Добавьте следующее в ваш файл
~/.hermes/.env:# Обязательно DISCORD_BOT_TOKEN=ваш-токен-бота DISCORD_ALLOWED_USERS=284102345871466496 # Несколько разрешенных пользователей (через запятую) # DISCORD_ALLOWED_USERS=284102345871466496,198765432109876543Затем запустите шлюз:
hermes gatewayБот должен появиться в сети в Discord в течение нескольких секунд. Отправьте ему сообщение — либо в ЛС, либо в канал, который он видит, — чтобы протестировать.
💡 Tip
Вы можете запуститьhermes gatewayв фоновом режиме или как systemd-сервис для постоянной работы. Подробнее см. в документации по развертыванию.Справочник по конфигурации
Поведение Discord контролируется двумя файлами:
~/.hermes/.envдля учетных данных и переключателей уровня env, и~/.hermes/config.yamlдля структурированных настроек. Переменные окружения всегда имеют приоритет над значениями config.yaml, если установлены оба.Переменные окружения (
.env)Переменная Обязательно По умолчанию Описание DISCORD_BOT_TOKENДа — Токен бота с Портала разработчиков Discord. DISCORD_ALLOWED_USERSДа — Разделенные запятыми Discord ID пользователей, которым разрешено взаимодействовать с ботом. Без этого или DISCORD_ALLOWED_ROLESшлюз отклоняет всех пользователей.DISCORD_ALLOWED_ROLESНет — Разделенные запятыми Discord ID ролей. Любой участник с одной из этих ролей авторизован — логика ИЛИ с DISCORD_ALLOWED_USERS. Автоматически включает Server Members Intent при подключении. Полезно, когда состав модераторов меняется: новые моды получают доступ сразу после назначения роли, без изменения конфигурации.DISCORD_HOME_CHANNELНет — ID канала, куда бот отправляет проактивные сообщения (вывод cron, напоминания, уведомления). DISCORD_HOME_CHANNEL_NAMEНет "Home"Отображаемое имя для домашнего канала в логах и выводе статуса. DISCORD_COMMAND_SYNC_POLICYНет "safe"Управляет синхронизацией нативных слеш-команд при запуске. "safe"сравнивает существующие глобальные команды и обновляет только изменившиеся, пересоздавая команды, когда изменения метаданных Discord не могут быть применены через патч."bulk"сохраняет старое поведениеtree.sync()."off"полностью пропускает синхронизацию при запуске.DISCORD_REQUIRE_MENTIONНет trueЕсли true, бот отвечает в каналах сервера только при@упоминании. Установитеfalse, чтобы отвечать на все сообщения во всех каналах.DISCORD_THREAD_REQUIRE_MENTIONНет falseЕсли true, ярлык упоминания в треде отключается — треды работают так же, как каналы, требуя@упоминаниедаже после того, как бот уже участвовал. Используйте это, когда несколько ботов находятся в одном треде, и вы хотите, чтобы каждый срабатывал только на явное@упоминание.DISCORD_FREE_RESPONSE_CHANNELSНет — Разделенные запятыми ID каналов, где бот отвечает без необходимости @упоминания, даже еслиDISCORD_REQUIRE_MENTIONравноtrue.DISCORD_IGNORE_NO_MENTIONНет trueЕсли true, бот молчит, если сообщение@упоминаетдругих пользователей, но не упоминает бота. Предотвращает вмешательство бота в разговоры, адресованные другим людям. Применяется только в каналах сервера, не в ЛС.DISCORD_AUTO_THREADНет trueЕсли true, автоматически создает новый тред для каждого@упоминанияв текстовом канале, чтобы каждый разговор был изолирован (аналогично поведению Slack). Сообщения, уже находящиеся в тредах или ЛС, не затрагиваются.DISCORD_ALLOW_BOTSНет "none"Управляет тем, как бот обрабатывает сообщения от других ботов Discord. "none"— игнорировать всех других ботов."mentions"— принимать только сообщения ботов, которые@упоминаютHermes."all"— принимать все сообщения ботов.DISCORD_REACTIONSНет trueЕсли true, бот добавляет реакции-эмодзи на сообщения во время обработки (👀 при начале, ✅ при успехе, ❌ при ошибке). Установитеfalse, чтобы полностью отключить реакции.DISCORD_IGNORED_CHANNELSНет — Разделенные запятыми ID каналов, где бот никогда не отвечает, даже при @упоминании. Имеет приоритет над всеми остальными настройками каналов.DISCORD_ALLOWED_CHANNELSНет — Разделенные запятыми ID каналов. Если установлено, бот отвечает только в этих каналах (плюс ЛС, если разрешено). Переопределяет config.yamldiscord.allowed_channels. Комбинируйте сDISCORD_IGNORED_CHANNELSдля выражения правил разрешения/запрета.DISCORD_NO_THREAD_CHANNELSНет — Разделенные запятыми ID каналов, где бот отвечает напрямую в канале вместо создания треда. Актуально только когда DISCORD_AUTO_THREADравноtrue.DISCORD_REPLY_TO_MODEНет "first"Управляет поведением ссылки на ответ: "off"— никогда не отвечать на исходное сообщение,"first"— ссылка на ответ только для первого фрагмента сообщения (по умолчанию),"all"— ссылка на ответ для каждого фрагмента.DISCORD_ALLOW_MENTION_EVERYONEНет falseЕсли false(по умолчанию), бот не может пинговать@everyoneили@here, даже если его ответ содержит эти токены. Установитеtrue, чтобы разрешить. См. Управление упоминаниями ниже.DISCORD_ALLOW_MENTION_ROLESНет falseЕсли false(по умолчанию), бот не может пинговать@roleупоминания. Установитеtrue, чтобы разрешить.DISCORD_ALLOW_MENTION_USERSНет trueЕсли true(по умолчанию), бот может пинговать отдельных пользователей по ID.DISCORD_ALLOW_MENTION_REPLIED_USERНет trueЕсли true(по умолчанию), ответ на сообщение пингует исходного автора.DISCORD_PROXYНет — URL прокси для подключений Discord (HTTP, WebSocket, REST). Переопределяет HTTPS_PROXY/ALL_PROXY. Поддерживает схемыhttp://,https://иsocks5://.HERMES_DISCORD_TEXT_BATCH_DELAY_SECONDSНет 0.6Окно ожидания, которое адаптер ждет перед отправкой накопленного текстового фрагмента. Полезно для сглаживания потокового вывода. HERMES_DISCORD_TEXT_BATCH_SPLIT_DELAY_SECONDSНет 2.0Задержка между разделенными фрагментами, когда одно сообщение превышает лимит длины Discord. Файл конфигурации (
config.yaml)Раздел
discordв~/.hermes/config.yamlотражает переменные окружения выше. Настройки config.yaml применяются как значения по умолчанию — если эквивалентная переменная окружения уже установлена, переменная окружения имеет приоритет.# Настройки, специфичные для Discord discord: require_mention: true # Требовать @упоминание в каналах сервера thread_require_mention: false # Если true, требовать @упоминание и в тредах (многоботовые треды) free_response_channels: "" # ID каналов через запятую (или YAML список) auto_thread: true # Автоматически создавать треды при @упоминании reactions: true # Добавлять реакции-эмодзи во время обработки ignored_channels: [] # ID каналов, где бот никогда не отвечает no_thread_channels: [] # ID каналов, где бот отвечает без создания треда channel_prompts: {} # Эфемерные системные промпты для каждого канала allow_mentions: # Что боту разрешено пинговать (безопасные значения по умолчанию) everyone: false # @everyone / @here пинги (по умолчанию: false) roles: false # @role пинги (по умолчанию: false) users: true # @user пинги (по умолчанию: true) replied_user: true # ссылка на ответ пингует автора (по умолчанию: true) # Изоляция сессий (применяется ко всем платформам шлюза, не только Discord) group_sessions_per_user: true # Изолировать сессии для каждого пользователя в общих каналахdiscord.require_mentionСовет: boolean — По умолчанию:
trueЕсли включено, бот отвечает на канале сервера только при прямо
@упоминании. ЛС всегда получает ответ независимо от этой настройки.discord.thread_require_mentionСовет: boolean — По умолчанию:
falseПо умолчанию, после того как бот принял участие в треде (автоматически созданном при
@упоминанииили ответил один раз), он продолжает каждое последующее сообщение в этом треде без необходимости повторного@упоминания. Это правильное поведение по умолчанию для разговоров один на один.В многоботовых тредах, когда пользователи обращаются к одному боту за раз, такое поведение по умолчанию становится проблемой — каждый другой бот в треде также обрабатывает каждое сообщение, сжигая кредиты и засоряя канал. Установите
thread_require_mention: true, чтобы отключить ярлык в треде и сделать треды такими же, как каналы. Явные@упоминанияпо-прежнему работают как раньше.discord: require_mention: true thread_require_mention: true # многоботовая настройкаdiscord.free_response_channelsСовет: строка или список — По умолчанию:
""ID каналов, где бот отвечает на все сообщения без необходимости
@упоминания. Принимает либо текст с разделителями-запятыми, либо список YAML:# Строковый формат discord: free_response_channels: "1234567890,9876543210" # Формат списка discord: free_response_channels: - 1234567890 - 9876543210Если родительский канал треда находится в этом списке, тред также становится свободным от упоминаний.
Каналы бесплатно отвечают также пропускают авто-треды — бот отвечает встроенно, и не создает новый тред для каждого сообщения. Это сохранит канал, пригодный для использования, в легковесном чате. Если вам нужно поведение с тредами, не добавляйте канал в список свободного ответа (используйте обычный поток с
@упоминанием).discord.auto_threadСовет: boolean — По умолчанию:
trueЕсли включено, каждое
@упоминаниев обычном текстовом канале автоматически вызывает новый тред для разговора. Это сохраняет основной канал чистым и обеспечивает каждому разговору свою изолированную историю сессии. После создания треда остальные сообщения в этом треде не требуют@упоминания— бот знает, что уже требует. Установитеthread_require_mentionвtrue, чтобы отключить этот ярлык в треде для многоботовых конфигураций.Сообщения, отправленные в существующих тредах или ЛС, не затрагиваются этой настройкой. Каналы, перечисленные в
discord.free_response_channelsилиdiscord.no_thread_channels, также обходят авто-треды и получают встроенные ответы.discord.reactionsСовет: boolean — По умолчанию:
trueУправляет темой, добавляя бот Режим эмодзи сообщений в виде визуальной обратной связи: - 👀 добавляется, когда бот начинает обработку вашего сообщения - ✅ добавиться, когда ответ успешно доставлен - ❌ добавиться, если во время обработки произойдет ошибка
Отключите это, если вы считаете «Режим замедления» или если у ролика нет разрешения Добавить реакции.
discord.ignored_channelsСовет: строка или список — По умолчанию:
[]ID каналов, где бот никогда не отвечает, даже при прямом
@упоминании. Это имеет минимальный приоритет — если канал находится в этом списке, бот молча игнорирует все сообщения там, независимо отrequire_mention,free_response_channelsили любой другой настройки.# Строковый формат discord: ignored_channels: "1234567890,9876543210" # Формат списка discord: ignored_channels: - 1234567890 - 9876543210Если родительский канал треда находится в этом списке, сообщения в этом треде также отключаются.
discord.no_thread_channelsСовет: строка или список — По умолчанию:
[]ID каналов, где бот отвечает напрямую в канале вместо создания треда. Это действует только тогда, когда
auto_threadравноtrue(по умолчанию). В этих каналах бот отвечает встроенно, как обычно, и не создает новый тред.discord: no_thread_channels: - 1234567890 # Бот отвечает встроенно здесьПолезно для каналов, предназначенных для взаимодействия с ботом, где треды созданы для собственного шума.
discord.channel_promptsСовет: отображение — По умолчанию:
{}Эфемерные системные промпты для каждого канала, которые включаются при каждом обороте в соответствующем канале Discord или треде, но не определяются в истории стенограмм.
discord: channel_prompts: "1234567890": | Этот канал предназначен для исследовательских задач. Предпочитайте глубокие сравнения, цитаты и краткий синтез. "9876543210": | Этот форум предназначен для поддержки в стиле терапии. Будьте теплыми, приземленными и без осуждения.Поведение: - Точное совпадение идентификатора треда/канала имеет приоритет. - Если сообщение приходит в тред или пост на форуме, и в этом треде нет явных записей, Hermes использует родительский идентификатор канала/форума. - Предлагается применять эфемерно во время выполнения, поэтому их изменение влияет на будущие обороты мгновенно, без перезаписи предыдущей сессии истории.
group_sessions_per_userСовет: boolean — По умолчанию:
trueЭта глобальная настройка шлюза (неспецифичная для Discord), которая установлена, позволяет пользователям получать изолированные сеансы истории на одном канале.
Когда
правда: Алиса и Боб, разговаривающие в#research, ведут каждый свой отдельный разговор с Hermesом. Когдаfalse: весь канал делит одну стенограмму разговора и один слот работающего агента.group_sessions_per_user: trueСм. раздел Модель сессий выше для полного описания последствий каждого режима.
display.tool_progressТип: строка — По умолчанию:
"all"— Значения:off,new,all,verboseУправляет темой, отправляет сообщения бота о прогрессе в чате во время обработки (например, «Чтение файла...», «Выполнение команды терминала...»). Это глобальная настройка шлюза, применяемая ко всем платформам.
display: tool_progress: "all" # off | new | all | verboseoff— нет сообщений о прогрессеnew— показать только первый вызов инструмента для оборотаall— показывать все вызовы инструментов (сокращенные до 40 символов в сообщениях шлюза)verbose— показать полные детали вызова инструмента (может создавать длинные сообщения)
display.tool_progress_commandСовет: boolean — По умолчанию:
falseЕсли включено, делаем слэш-команду
/verboseдоступной в шлюзе, что позволяет вам переключать режимы прогресса инструментов (off → new → all → verbose → off) без редактирования config.yaml.display: tool_progress_command: trueУправление доступом к слеш-командам
По умолчанию каждый разрешенный пользователь может выполнить любую слеш-команду. Чтобы просмотреть ваш список разрешенных для администраторов (полный доступ к слеш-командам) и обычных пользователей (только команды, которые вы явно разрешили), разделы
allow_admin_fromиuser_allowed_commandsв блокеextraплатформы Discord:gateway: platforms: discord: extra: # Существующий список разрешенных пользователей (без изменений) allow_from: - "123456789012345678" # ID пользователя-администратора - "999888777666555444" # ID обычного пользователя # НОВОЕ — администраторы получают все слеш-команды (встроенные + плагины) allow_admin_from: - "123456789012345678" # НОВОЕ — неадминистративные разрешенные пользователи могут выполнять только эти слеш-команды. # /help и /whoami всегда разрешены, чтобы пользователи могли видеть свой доступ. user_allowed_commands: - status - model - history # Опционально: отдельные списки администраторов/команд для каналов сервера group_allow_admin_from: - "123456789012345678" group_user_allowed_commands: - statusПоведение:
- Пользователь в
allow_admin_fromдля области (ЛС или канал сервера) может выполнять все зарегистрированные слеш-команды — как встроенные, так и зарегистрированные плагины — через живую команду реестра. - Пользователь, не входящий в
allow_admin_from, может выполнять только команды, перечисленные вuser_allowed_commands, плюс всегда разрешенные:/helpи/whoami. - Обычный чат (не слэш-сообщения) не затрагивается. Неадминистративные пользователи по-прежнему могут нормально общаться с агентом; они просто не могут запускать произвольные команды.
- Обратная связь: если
allow_admin_fromне установлен для области, блокировка слеш-команды для этой области отключена. Существующие установки продолжают работать без изменений. - Статус администратора в ЛС не подразумевает статус администратора на канале сервера. каждая область имеет свой собственный список администраторов.
Используйте
/whoami, чтобы увидеть активную область, ваш уровень (администратор/пользователь/без блокировки) и какие слеш-команды вы можете выполнить.Интерактивный выбор моделей
Отправьте
/modelбез аргументов в канал Discord, чтобы открыть выпадающий список выбора моделей:- Выбор провайдера — выпадающий список Выберите с доступными провайдерами (до 25).
- Выбор модели — второй выпадающий список с моделями для провайдера (до 25).
Выбор заканчивается через 120 секунд. Только авторизованные пользователи (т.е. те, кто в
DISCORD_ALLOWED_USERS) могут взаимодействовать с ними. Если вы знаете имя модели, введите/model <имя>напрямую.Нативные слэш-команды для навыков
Hermes автоматически регистрирует выбранные навыки как собственные приложения команды Discord. Это означает, что навыки рабочих в меню автодополнения
/Discord вместе с тяжёлыми командами.- Каждый навык становится слеш-командой Discord (например,
/code-review,/ascii-art) - Навыки принимают необязательный строковый параметр
args - Discord имеет ограничение на 100 командных приложений в боте — если у вас больше навыков, чем имеющиеся слоты, дополнительные навыки продаются с предупреждениями в логах.
- Навыки регистрируются во время запуска бота вместе с командами, такими как
/model,/resetи/background
Никакой дополнительной настройки не требуется — любой навык, установленный через
hermesskills install, автоматически регистрируется как слэш-команда Discord при следующем перезапуске шлюза.Отключение регистрации слеш-команд
Если вы запускаете несколько шлюзов Hermes для одного и того же приложения Discord (например, Staging + Production), только один из них должен владеть глобальной регистрацией слеш-команды — в противном случае последний запуск побеждает, и регистрация колеблется. Отключите слеш-команду регистрации на шлюзе «Ведомости»:
gateway: platforms: discord: extra: slash_commands: false # по умолчанию: trueОставление
trueна «основном» шлюзе сохраняет нормальное поведение — глобальные команды меню/для встроенных и установленных функций.Отправка медиа (
send_message+ тегиMEDIA:)Адаптер Discord поддерживает нативную загрузку файлов для всех типов медиа через инструмент send_message и встроенные теги MEDIA:/путь/к/файлу, отправляемые агентом:
Тип Как доставляется Изображения (PNG/JPG/WebP) Нативное вложение изображения Discord с предпросмотром Анимированные GIF send_animationзагружается какanimation.gif, чтобы Discord воспроизвел его встроенно (а не как статическую миниатюру)Видео (MP4/MOV) send_video— родной видеоплеерАудио / Голос send_voice— нативное голосовое сообщение, если возможно, иначе вложение файлаДокументы (PDF/ZIP/docx и т.д.) send_document— собственное вложение с запускомЛимит размера одного загрузки Discord зависит от уровня буста сервера (от 25 МБ бесплатно, до 500 МБ). Если Hermes получает HTTP 413, адаптер возвращается к ссылке, указывающей на локальный путь кэша, вместо того, чтобы молчать, возникает ошибка.
Домашний канал
Вы можете назначить «домашний канал», куда бот отправляет проактивные сообщения (например, выводить задачи cron, напоминания и уведомления). Есть два способа его установки:
Использование слеш-команды
Введите
/sethomeна любом канале Discord, где присутствует бот. Этот канал станет любимым.Ручная настройка
Добавьте это в ваш
~/.hermes/.env:DISCORD_HOME_CHANNEL=123456789012345678 DISCORD_HOME_CHANNEL_NAME="#bot-updates"Замените ID на фактический ID канала (щелкните правой кнопкой мыши → Copy Channel ID при включенном режиме разработчика).
Голосовые сообщения
Hermes Agent поддерживает голосовые сообщения Discord:
- Входящие голосовые сообщения автоматически транскрибируются с использованием настроенного STT-провайдера: локальный
faster-whisper(без ключа), Groq Whisper (GROQ_API_KEY) или OpenAI Whisper (VOICE_TOOLS_OPENAI_KEY). - Текст в речь: Используйте
/voice tts, чтобы бот отправлял озвученные аудиоответы вместе с текстовыми ответами. - Голосовые каналы Discord: Hermes также может присоединиться к голосовому каналу, слушать говорящих пользователей и отвечать в канале.
Полное руководство по настройке и эксплуатации см. в: - Голосовой режим - Использование голосового режима с Hermes
Форумные каналы
Форумные каналы Discord (тип 15) не принимают прямые сообщения — каждый пост в форуме должен быть тредом. Hermes автоматически определяет форумные каналы и создает новый пост-тред всякий раз, когда ему нужно отправить туда сообщение, поэтому
send_message, TTS, изображения, голосовые сообщения и вложения файлов работают без специальной обработки со стороны агента.- Имя треда берется из первой строки сообщения (префикс заголовка markdown удаляется, ограничение 100 символов). Когда сообщение состоит только из вложения, имя файла используется как запасное имя треда.
- Вложения передаются вместе с начальным сообщением нового треда — нет отдельного шага загрузки, нет частичных отправок.
- Один вызов, один тред: каждая отправка в форум создает новый тред. Последовательные отправки в один и тот же форум будут создавать отдельные треды.
- Обнаружение в три слоя: сначала кэш каталога каналов, затем кэш локального процесса, и, наконец, живой запрос
GET /channels/{id}как последнее средство (результат которого затем запоминается на время жизни процесса).
Обновление каталога (
/channels refreshна платформах, которые его поддерживают, или перезапуск шлюза) заполняет кэш любыми форумными каналами, созданными после запуска бота.Устранение неполадок
Бот онлайн, но не отвечает на сообщения
Причина: Message Content Intent отключен.
Исправление: Перейдите на Портал разработчиков → ваше приложение → Bot → Privileged Gateway Intents → включите Message Content Intent → Save Changes. Перезапустите шлюз.
Ошибка "Disallowed Intents" при запуске
Причина: Ваш код запрашивает намерения, которые не включены на портале разработчика.
Исправление: Включите все три привилегированных намерения шлюза (Presence, Server Members, Message Content) в настройках Bot, затем перезапустите.
Бот не видит сообщения в определенном канале
Причина: У роли бота нет разрешения на просмотр этого канала.
Исправление: В Discord перейдите в настройки канала → Permissions → добавьте роль бота с включенными View Channel и Read Message History.
Ошибки 403 Forbidden
Причина: У бота отсутствуют необходимые разрешения.
Исправление: Повторно пригласите бота с правильными разрешениями, используя URL из шага 5, или вручную настройте разрешения роли бота в Server Settings → Roles.
Бот офлайн
Причина: Шлюз Hermes не запущен или токен неверен.
Исправление: Проверьте, что
hermes gatewayзапущен. ПроверьтеDISCORD_BOT_TOKENв вашем файле.env. Если вы недавно сбрасывали токен, обновите его."User not allowed" / Бот игнорирует вас
Причина: Ваш User ID отсутствует в
DISCORD_ALLOWED_USERS.Исправление: Добавьте ваш User ID в
DISCORD_ALLOWED_USERSв~/.hermes/.envи перезапустите шлюз.Люди в одном канале неожиданно делят контекст
Причина:
group_sessions_per_userотключен, или платформа не может предоставить ID пользователя для сообщений в этом контексте.Исправление: Установите это в
~/.hermes/config.yamlи перезапустите шлюз:group_sessions_per_user: trueЕсли вы намерены хотите общий разговор в комнате, оставьте его выключенным — просто ожидайте общей истории стенограмм и общего поведения прерываний.
Безопасность
⚠️ Warning
Всегда устанавливайте DISCORD_ALLOWED_USERS (или DISCORD_ALLOWED_ROLES), чтобы следить за кругом людей, которые могут взаимодействовать с ботом. Без какого-либо из них шлюз по умолчанию отклоняет всех пользователей в соответствии с мерами безопасности. Авторизуйте только тех, кому вы доверяете — авторизованные пользователи имеют полный доступ к возможностям агента, включая использование инструментов и доступ к системе.
Управление доступом на основе ролей
Для серверов, где доступ управляется ролями, а не отдельными списками пользователей (команды модераторов, службы поддержки, внутренние инструменты), используйте
DISCORD_ALLOWED_ROLES— список идентификаторов ролей, разделенных запятыми. Любой участник с одной из этих ролей авторизован.# ~/.hermes/.env — работает вместе с DISCORD_ALLOWED_USERS или вместо него DISCORD_ALLOWED_ROLES=987654321098765432,876543210987654321Семантика:
- или со списком пользователей. Пользователь авторизован, если его идентификатор есть в
DISCORD_ALLOWED_USERSили у него есть любая роль изDISCORD_ALLOWED_ROLES. - Намерение участников сервера включается автоматически. Когда установлен
DISCORD_ALLOWED_ROLES, бот включает намерение участников при подключении — требуется, чтобы Discord отправлял информацию о главных ролях вместе с записями участников. - Идентификаторы ролей, а не имена. Получите их в Discord: Настройки пользователя → Дополнительно → Режим разработчика ВКЛ, затем щелкните правой кнопкой мыши по любому ролику → Копировать идентификатор роли.
- Запасной вариант для ЛС. В ЛСпроверке роли сканирует общие гильдии; Пользователь с разрешенной ролью на любом общем сервере, а также авторизован в ЛС.
Это гарантированный шаблон, когда состав команды модераторов меняется — новые модераторы получают доступ в момент распределения роликов без редактирования
.envили перезапуска шлюза.Управление воспоминаниями
По умолчанию Hermes блокирует возможность бота пинговать
@everyone,@hereи упоминания ролей, даже если его ответ содержит токены. Это случайное засорение на сервере из-за неудачно предложенного или повторного пользовательского контента. Индивидуальные пинги@userи пинги ссылок на ответ (маленький чип "отвечает на...") включены включенными, чтобы обычный разговор продолжал работать.Вы можете ослабить эти значения по умолчанию либо через переменные окружения, либо через
config.yaml:# ~/.hermes/config.yaml discord: allow_mentions: everyone: false # разрешить боту пинговать @everyone / @here roles: false # разрешить боту пинговать @role упоминания users: true # разрешить боту пинговать отдельных @users replied_user: true # пинговать автора при ответе на его сообщение```bash
~/.hermes/.env — переменные окружения имеют приоритет над config.yaml
DISCORD_ALLOW_MENTION_EVERYONE=false DISCORD_ALLOW_MENTION_ROLES=false DISCORD_ALLOW_MENTION_USERS=true DISCORD_ALLOW_MENTION_REPLIED_USER=true
``<div class="admonition admonition-tip"><p class="admonition-title">💡 Tip</p> Оставьте "все" и "роли" в значении "ложь", если вы точно не знаете, зачем они вам нужны. LLM очень легко может генерировать текст@everyone` внутри обычного ответа; без этой защиты это уведомило бы каждого участника вашего сервера.