Настройка Дискорда

Агент 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 — это не вебхук, который отвечает без сохранения состояния. Он работает через полный шлюз обмена сообщениями, что означает, что каждое входящее сообщение проходит через:

  1. авторизация (DISCORD_ALLOWED_USERS)
  2. проверки подлинности / свободный ответ
  3. сеанс поиска
  4. загрузку стенограммы сессии
  5. Обычное выполнение агентом Hermes, включая инструменты, память и слеш-команды.
  6. Доставка ответа обратно в 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

  1. Перейдите на Портал разработчиков Discord и войдите в свою учетную запись Discord.
  2. Нажмите New Application в правом верхнем углу.
  3. Введите имя для вашего приложения (например, "Hermes Agent") и примите Условия предоставления услуг разработчика.
  4. Нажмите Create.

Вы попадете на страницу General Information. Запомните Application ID — он понадобится вам позже для создания URL приглашения.

Шаг 2: Создайте бота

  1. На левой боковой панели нажмите Bot.
  2. Discord автоматически создает пользователя-бота для вашего приложения. Вы увидите имя пользователя бота, которое можно настроить.
  3. В разделе Authorization Flow:
  4. Установите Public Bot в ON — требуется для использования предоставленной Discord ссылки приглашения (рекомендуется). Это позволяет вкладке Installation генерировать URL авторизации по умолчанию.
  5. Оставьте Require OAuth2 Code Grant в положении OFF.

    💡 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.

Нажмите Save Changes внизу страницы.

Шаг 4: Получите токен бота

Токен бота — это учетные данные, которые Hermes Agent использует для входа в систему в качестве вашего бота. Все еще на странице Bot:

  1. В разделе Token нажмите Reset Token.
  2. Если у вас включена двухфакторная аутентификация в учетной записи Discord, введите код 2FA.
  3. Discord отобразит ваш новый токен. Скопируйте его немедленно.

    ⚠️ Warning

    [Токен отображается только один раз] Токен отображается только один раз. Если вы его потеряете, вам нужно будет сбросить его и создать новый. Никогда не делитесь токеном публично и не сохраняйте его в Git — любой, у кого есть этот токен, получает полный контроль над вашим ботом.
    Храните токен в безопасном месте (например, в менеджере паролей). Он понадобится вам на шаге 8.

Шаг 5: Сгенерируйте URL приглашения

Вам нужен URL OAuth2, чтобы пригласить бота на ваш сервер. Есть два способа сделать это:

Вариант A: Использование вкладки Installation (рекомендуется)

📝 Note

[Требуется Public Bot]

Этот метод требует, чтобы Public Bot был установлен в ON на шаге 2. Если вы установили Public Bot в OFF, используйте метод Manual URL ниже.

1. На левой боковой панели нажмите Installation. 2. В разделе Installation Contexts включите Guild Install. 3. Для Install Link выберите Discord Provided Link. 4. В разделе Default Install Settings для Guild Install: - Scopes: выберите 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: Пригласите на свой сервер

  1. Откройте URL-адрес приглашения в браузере (из вкладки Установка или URL-адреса, созданного вами вручную).
  2. В раскрывающемся списке Добавить на сервер выберите свой сервер.
  3. Нажмите Продолжить, а затем Авторизовать.
  4. При необходимости пройдите CAPTCHA.

    ℹ️ Info

    Для приглашения бота на сервер Discord требуется разрешение Управление сервером. Если вы не видите свой сервер в списке, попросите администратора сервера использовать ссылку приглашения.
    После авторизации бот появится в списке участников вашего сервера (он будет работать в режиме офлайн, пока вы не запустите шлюз Hermes).

Шаг 7: Найдите свой идентификатор пользователя Discord

Агент Hermes использует ваш идентификатор пользователя Discord для управления темами, которые могут взаимодействовать с ним. Чтобы найти его:

  1. Откройте Discord (настольное приложение или веб-версия).
  2. Перейдите в НастройкиДополнительно → выберите Режим разработчика в ВКЛ.
  3. Закройте настройки.
  4. Нажмите правую кнопку мыши по своему имени пользователя (в списке участников или профиле) → Копировать идентификатор пользователя.

Ваш идентификатор пользователя — это длинное число, например, 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.yaml discord.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 | 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

Поведение:

Используйте /whoami, чтобы увидеть активную область, ваш уровень (администратор/пользователь/без блокировки) и какие слеш-команды вы можете выполнить.

Интерактивный выбор моделей

Отправьте /model без аргументов в канал Discord, чтобы открыть выпадающий список выбора моделей:

  1. Выбор провайдера — выпадающий список Выберите с доступными провайдерами (до 25).
  2. Выбор модели — второй выпадающий список с моделями для провайдера (до 25).

Выбор заканчивается через 120 секунд. Только авторизованные пользователи (т.е. те, кто в DISCORD_ALLOWED_USERS) могут взаимодействовать с ними. Если вы знаете имя модели, введите /model <имя> напрямую.

Нативные слэш-команды для навыков

Hermes автоматически регистрирует выбранные навыки как собственные приложения команды Discord. Это означает, что навыки рабочих в меню автодополнения / Discord вместе с тяжёлыми командами.

Никакой дополнительной настройки не требуется — любой навык, установленный через 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:

Полное руководство по настройке и эксплуатации см. в: - Голосовой режим - Использование голосового режима с Hermes

Форумные каналы

Форумные каналы Discord (тип 15) не принимают прямые сообщения — каждый пост в форуме должен быть тредом. Hermes автоматически определяет форумные каналы и создает новый пост-тред всякий раз, когда ему нужно отправить туда сообщение, поэтому send_message, TTS, изображения, голосовые сообщения и вложения файлов работают без специальной обработки со стороны агента.

Обновление каталога (/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

Семантика:

Это гарантированный шаблон, когда состав команды модераторов меняется — новые модераторы получают доступ в момент распределения роликов без редактирования .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` внутри обычного ответа; без этой защиты это уведомило бы каждого участника вашего сервера. Для получения дополнительной информации о защите вашего развертывания Агент Hermes см. Руководство по безопасности.