Настройка Discord

Hermes Agent интегрируется с Discord в качестве бота, позволяя вам общаться с вашим AI-ассистентом через личные сообщения или серверные каналы. Бот получает ваши сообщения, обрабатывает их через конвейер Hermes Agent (включая использование инструментов, память и рассуждения) и отвечает в реальном времени. Поддерживаются текст, голосовые сообщения, вложения файлов и slash-команды.

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

  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 (ID приложения) — он понадобится вам позже для создания URL-приглашения.

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

  1. На левой боковой панели нажмите Bot (Бот).

  2. Discord автоматически создаёт пользователя-бота для вашего приложения. Вы увидите имя пользователя бота, которое можно настроить.

  3. В разделе Authorization Flow (Поток авторизации):

  4. Установите Public Bot (Публичный бот) в положение ВКЛ — необходимо для использования ссылки-приглашения от Discord (рекомендуется). Это позволяет вкладке Installation генерировать URL авторизации по умолчанию.
  5. Оставьте Require OAuth2 Code Grant (Требовать код OAuth2) в положении ВЫКЛ.
На этой странице вы можете установить произвольный аватар и баннер для вашего бота. Именно это увидят пользователи в Discord.

info[Альтернатива приватного бота] Если вы предпочитаете оставить бота приватным (Public Bot = ВЫКЛ), вы должны использовать метод Manual URL (Ручной 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, переведя их в положение ВКЛ.

warning[Это причина №1, почему Discord-боты не работают] Если ваш бот онлайн, но никогда не отвечает на сообщения, Message Content Intent почти наверняка отключён. Вернитесь на Портал разработчиков, выберите ваше приложение → Bot → Privileged Gateway Intents, и убедитесь, что Message Content Intent включён. Нажмите Save Changes (Сохранить изменения).

Относительно количества серверов:

Нажмите Save Changes (Сохранить изменения) внизу страницы.

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

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

  1. В разделе Token (Токен) нажмите Reset Token (Сбросить токен).

  2. Если на вашей учётной записи Discord включена двухфакторная аутентификация, введите ваш 2FA-код.

  3. Discord отобразит ваш новый токен. Скопируйте его немедленно.

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

Сохраните токен в надёжном месте (например, в менеджере паролей). Он понадобится вам на Шаге 8.

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

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

note[Требуется Public Bot] Этот метод требует, чтобы Public Bot был установлен в ВКЛ на Шаге 2. Если вы установили Public Bot в ВЫКЛ, используйте вместо этого метод Manual URL ниже.

  1. На левой боковой панели нажмите Installation (Установка).

  2. В разделе Installation Contexts (Контексты установки) включите Guild Install (Установка на сервер).

  3. Для Install Link (Ссылка установки) выберите Discord Provided Link (Ссылка от Discord).

  4. В разделе Default Install Settings (Настройки установки по умолчанию) для Guild Install:

  5. Scopes (Области): выберите bot и applications.commands
  6. Permissions (Разрешения): выберите разрешения, перечисленные ниже.

Вариант B: Ручной URL

Вы можете создать URL-приглашение напрямую, используя этот формат:

https://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=274878286912

Замените YOUR_APP_ID на ID приложения из Шага 1.

Необходимые разрешения

Это минимальные разрешения, необходимые вашему боту:

Целочисленные значения разрешений

Уровень Целое число разрешений Что включено
Минимальный 117760 View Channels, Send Messages, Read Message History, Attach Files
Рекомендуемый 274878286912 Всё вышеперечисленное плюс Embed Links, Send Messages in Threads, Add Reactions

Шаг 6: Пригласите на ваш сервер

  1. Откройте URL-приглашение в вашем браузере (из вкладки Installation или созданного вами вручную URL).

  2. В выпадающем списке Add to Server (Добавить на сервер) выберите ваш сервер.

  3. Нажмите Continue (Продолжить), затем Authorize (Авторизовать).

  4. Пройдите CAPTCHA, если потребуется.

Для приглашения бота на сервер Discord требуется разрешение **Manage Server** (Управлять сервером). Если вы не видите свой сервер в выпадающем списке, попросите администратора сервера использовать ссылку-приглашение.

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

Шаг 7: Найдите ваш Discord User ID

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

  1. Откройте Discord (десктопное или веб-приложение).

  2. Перейдите в Settings (Настройки) → Advanced (Расширенные) → переключите Developer Mode (Режим разработчика) в положение ВКЛ.

  3. Закройте настройки.

  4. Щёлкните правой кнопкой мыши по своему имени пользователя (в сообщении, списке участников или вашем профиле) → Copy User ID (Копировать ID пользователя).

Ваш User ID — это длинное число, например 284102345871466496.

Режим разработчика также позволяет копировать **Channel IDs** и **Server IDs** таким же образом — щёлкните правой кнопкой мыши по имени канала или сервера и выберите Copy ID. Вам понадобится Channel ID, если вы хотите вручную установить домашний канал.

Шаг 8: Настройте Hermes Agent

Запустите команду guided setup:

hermes gateway setup

Выберите Discord при появлении запроса, затем вставьте токен бота и ID пользователя, когда будет предложено.

Вариант B: Ручная настройка

Добавьте следующее в ваш файл ~/.hermes/.env:

# Обязательно
DISCORD_BOT_TOKEN=your-bot-token
DISCORD_ALLOWED_USERS=284102345871466496

# Несколько разрешённых пользователей (через запятую)
# DISCORD_ALLOWED_USERS=284102345871466496,198765432109876543

Затем запустите шлюз:

hermes gateway

Бот должен появиться онлайн в Discord в течение нескольких секунд. Отправьте ему сообщение — либо в ЛС, либо в канале, который он видит — чтобы протестировать.

Вы можете запустить `hermes gateway` в фоне или как systemd-сервис для постоянной работы. Смотрите документацию по развёртыванию для подробностей.

Справочник по конфигурации

Поведение Discord контролируется через два файла: ~/.hermes/.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" Управляет синхронизацией нативных slash-команд при запуске. "safe" сравнивает существующие глобальные команды и обновляет только изменённые, пересоздавая команды, когда изменения метаданных Discord не могут быть применены через патч. "bulk" сохраняет старое поведение tree.sync(). "off" полностью пропускает синхронизацию при запуске.
DISCORD_REQUIRE_MENTION Нет true Когда true, бот отвечает в серверных каналах только при @упоминании. Установите false, чтобы отвечать на все сообщения в каждом канале.
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, бот добавляет emoji-реакции на сообщения во время обработки (👀 при начале, ✅ при успехе, ❌ при ошибке). Установите 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, чтобы разрешить. См. Mention Control ниже.
DISCORD_ALLOW_MENTION_ROLES Нет false Когда false (по умолчанию), бот не может пинговать упоминания @ролей. Установите 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-specific settings
discord:
  require_mention: true           # Требовать @упоминание в серверных каналах
  free_response_channels: ""      # ID каналов через запятую (или YAML-список)
  auto_thread: true               # Авто-создание тредов при @упоминании
  reactions: true                 # Добавлять emoji-реакции во время обработки
  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.free_response_channels

Тип: строка или список — По умолчанию: ""

ID каналов, где бот отвечает на все сообщения без необходимости @упоминания. Принимает как строку с разделителями-запятыми, так и YAML-список:

# Формат строки
discord:
  free_response_channels: "1234567890,9876543210"

# Формат списка
discord:
  free_response_channels:
    - 1234567890
    - 9876543210

Если родительский канал треда находится в этом списке, тред также становится свободным от упоминаний.

Каналы свободного ответа также пропускают авто-создание тредов — бот отвечает встроенно, вместо создания нового треда для каждого сообщения. Это сохраняет канал пригодным для использования как лёгкая чат-поверхность. Если вы хотите поведение с тредами, не добавляйте канал в список свободного ответа (используйте обычный поток с @упоминанием).

discord.auto_thread

Тип: boolean — По умолчанию: true

Когда включено, каждое @упоминание в обычном текстовом канале автоматически создаёт новый тред для разговора. Это сохраняет основной канал чистым и даёт каждому разговору свою собственную изолированную историю сессии. После создания треда последующие сообщения в этом треде не требуют @упоминания — бот знает, что он уже участвует.

Сообщения, отправленные в существующих тредах или ЛС, не затрагиваются этой настройкой. Каналы, перечисленные в discord.free_response_channels или discord.no_thread_channels, также обходят авто-создание тредов и получают встроенные ответы.

discord.reactions

Тип: boolean — По умолчанию: true

Управляет тем, добавляет ли бот emoji-реакции на сообщения в качестве визуальной обратной связи:

Отключите это, если считаете реакции отвлекающими или если у роли бота нет разрешения Add Reactions.

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": |
      Этот форум для поддержки в терапевтическом стиле. Будь тёплым,
      заземлённым и без осуждения.

Поведение:

group_sessions_per_user

Тип: boolean — По умолчанию: true

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

Когда true: Алиса и Боб, общающиеся в #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

Когда включено, делает slash-команду /verbose доступной в шлюзе, позволяя вам переключаться между режимами прогресса инструментов (off → new → all → verbose → off) без редактирования config.yaml.

display:
  tool_progress_command: true

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

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

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

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

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

Нативные Slash-команды для навыков

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

Никакой дополнительной настройки не требуется — любой навык, установленный через hermes skills install, автоматически регистрируется как Discord slash-команда при следующем перезапуске шлюза.

Отключение регистрации slash-команд

Если вы запускаете несколько шлюзов Hermes для одного и того же Discord-приложения (например, staging + production), только один из них должен владеть глобальной регистрацией slash-команд — иначе последний запуск перезаписывает, и регистрации flapping. Выключите регистрацию slash-команд на "ведомом" шлюзе:

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 MB бесплатно, до 500 MB). Если Hermes получает HTTP 413, адаптер вместо тихого отказа использует ссылку на локальный путь кэша.

Домашний канал

Вы можете назначить "домашний канал", куда бот отправляет проактивные сообщения (такие как вывод cron-задач, напоминания и уведомления). Есть два способа установить его:

Использование slash-команды

Введите /sethome в любом канале Discord, где присутствует бот. Этот канал становится домашним каналом.

Ручная настройка

Добавьте это в ваш ~/.hermes/.env:

DISCORD_HOME_CHANNEL=123456789012345678
DISCORD_HOME_CHANNEL_NAME="#bot-updates"

Замените ID на фактический ID канала (правый клик → Copy Channel ID при включённом Developer Mode).

Голосовые сообщения

Hermes Agent поддерживает голосовые сообщения Discord:

Полное руководство по настройке и эксплуатации смотрите в:

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

Форум-каналы 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

Если вы намеренно хотите общий разговор в комнате, оставьте это выключенным — просто ожидайте общую историю транскрипта и общее поведение прерываний.

Безопасность

Всегда устанавливайте `DISCORD_ALLOWED_USERS` (или `DISCORD_ALLOWED_ROLES`), чтобы ограничить, кто может взаимодействовать с ботом. Без любого из них шлюз по умолчанию отклоняет всех пользователей в качестве меры безопасности. Авторизуйте только тех, кому вы доверяете — авторизованные пользователи имеют полный доступ к возможностям агента, включая использование инструментов и доступ к системе.

Управление доступом на основе ролей

Для серверов, где доступ управляется ролями вместо списков отдельных пользователей (команды модераторов, сотрудники поддержки, внутренние инструменты), используйте DISCORD_ALLOWED_ROLES — список ID ролей через запятую. Любой участник с одной из этих ролей авторизован.

# ~/.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   # пинговать автора при ответе на его сообщение
# ~/.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
Оставьте `everyone` и `roles` в значении `false`, если вы точно не знаете, зачем они вам нужны. LLM очень легко может сгенерировать строку `@everyone` внутри обычного ответа; без этой защиты это уведомило бы каждого участника вашего сервера.

Для получения дополнительной информации о безопасности вашего развёртывания Hermes Agent смотрите Руководство по безопасности.