Перейти к содержанию

Discord

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

Как ведёт себя Hermes

Контекст Поведение
Личные сообщения (ЛС) Hermes отвечает на каждое сообщение. @упоминание не требуется. Каждый ЛС имеет собственную сессию.
Серверные каналы По умолчанию Hermes отвечает только когда вы @упоминаете его. Если вы пишете в канале без упоминания, Hermes игнорирует сообщение.
Каналы свободного ответа Вы можете сделать отдельные каналы свободными от упоминаний с помощью DISCORD_FREE_RESPONSE_CHANNELS или отключить упоминания глобально с помощью DISCORD_REQUIRE_MENTION=false. Сообщения в таких каналах обрабатываются встроенно — автоматическое создание веток пропускается, чтобы канал оставался лёгким чатом.
Ветки (Threads) Hermes отвечает в той же ветке. Правила упоминаний всё ещё действуют, если только эта ветка или её родительский канал не настроены как свободные для ответа. Ветки изолированы от родительского канала для истории сессии.
Общие каналы с несколькими пользователями По умолчанию Hermes изолирует историю сессии для каждого пользователя в канале ради безопасности и ясности. Два человека, общающиеся в одном канале, не делят одну стенограмму, если вы явно не отключите это.
Сообщения, упоминающие других пользователей Когда DISCORD_IGNORE_NO_MENTION установлен в true (по умолчанию), Hermes молчит, если сообщение @упоминает других пользователей, но не упоминает бота. Это предотвращает вмешательство бота в разговоры, адресованные другим людям. Установите false, если хотите, чтобы бот отвечал на все сообщения независимо от того, кто упомянут. Это применимо только в серверных каналах, не в ЛС.
tip
Если вы хотите обычный канал помощи бота, где люди могут общаться с Hermes без необходимости каждый раз его тегировать, добавьте этот канал в DISCORD_FREE_RESPONSE_CHANNELS.
### Модель Discord Gateway
Hermes в Discord — это не вебхук, отвечающий без сохранения состояния. Он работает через полный шлюз сообщений, что означает, что каждое входящее сообщение проходит через:
1. авторизацию (DISCORD_ALLOWED_USERS)
2. проверки упоминаний / свободного ответа
3. поиск сессии
4. загрузку стенограммы сессии
5. обычное выполнение Hermes Agent, включая инструменты, память и слеш-команды
6. доставку ответа обратно в Discord

Это важно, потому что поведение на оживлённом сервере зависит как от маршрутизации Discord, так и от политики сессий Hermes.

Модель сессии в Discord

По умолчанию: * каждый ЛС получает свою собственную сессию * каждая серверная ветка получает своё пространство имён сессии * каждый пользователь в общем канале получает свою собственную сессию внутри этого канала

Таким образом, если Алиса и Боб оба общаются с Hermes в #research, Hermes по умолчанию обрабатывает их как отдельные разговоры, даже если они используют один и тот же видимый канал Discord. Это контролируется в config.yaml: [code] group_sessions_per_user: true

[/code] Установите false, только если вы явно хотите один общий разговор для всей комнаты: [code] group_sessions_per_user: false

[/code] Общие сессии могут быть полезны для совместной комнаты, но они также означают: * пользователи делят рост контекста и затраты на токены * длительная задача одного человека с интенсивным использованием инструментов может раздуть контекст для всех остальных * выполняющаяся задача одного человека может прервать последующее сообщение другого человека в той же комнате

Прерывания и конкурентность

Hermes отслеживает выполняющихся агентов по ключу сессии. При настройке по умолчанию group_sessions_per_user: true: * Алиса, прерывающая свой собственный выполняющийся запрос, влияет только на сессию Алисы в этом канале * Боб может продолжать общаться в том же канале, не наследуя историю Алисы и не прерывая выполнение Алисы

При group_sessions_per_user: false: * вся комната делит один слот выполняющегося агента для этого канала/ветки * последующие сообщения от разных людей могут прерывать друг друга или становиться в очередь

Это руководство проведёт вас через полный процесс настройки — от создания бота на Discord Developer Portal до отправки вашего первого сообщения.

Шаг 1: Создание приложения Discord

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

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

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

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

tip Вы можете установить пользовательский аватар и баннер для вашего бота на этой странице. Именно это увидят пользователи в Discord. Альтернатива с частным ботом Если вы предпочитаете оставить бота частным (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 бот не может разрешать имена пользователей для списка разрешённых пользователей и может не определить, кто ему пишет.

Это причина №1, по которой боты Discord не работают Если ваш бот онлайн, но никогда не отвечает на сообщения, Message Content Intent почти наверняка отключён. Вернитесь в Developer Portal, выберите ваше приложение → Bot → Privileged Gateway Intents и убедитесь, что Message Content Intent включён. Нажмите Save Changes. Относительно количества серверов: * Если ваш бот находится менее чем на 100 серверах, вы можете свободно включать и выключать намерения. * Если ваш бот находится на 100 или более серверах, Discord требует подать заявку на верификацию для использования привилегированных намерений. Для личного использования это не является проблемой.

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

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

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

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

Шаг 5: Генерация URL приглашения

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

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

Требуется 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 приглашения напрямую, используя этот формат: [code] https://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=274878286912

[/code] Замените YOUR_APP_ID на Application ID из Шага 1.

Требуемые разрешения

Это минимальные разрешения, необходимые вашему боту: * View Channels — видеть каналы, к которым у него есть доступ * Send Messages — отвечать на ваши сообщения * Embed Links — форматировать расширенные ответы * Attach Files — отправлять изображения, аудио и файловые результаты * Read Message History — поддерживать контекст разговора

Рекомендуемые дополнительные разрешения

  • Send Messages in Threads — отвечать в беседах в ветках
  • Add Reactions — добавлять реакции на сообщения для подтверждения

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

Уровень Целое число разрешений Что включает
Минимальный 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.

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

Шаг 7: Поиск вашего Discord User ID

Hermes Agent использует ваш Discord User ID, чтобы контролировать, кто может взаимодействовать с ботом. Чтобы найти его: 1. Откройте Discord (десктопное или веб-приложение). 2. Перейдите в SettingsAdvanced → переключите Developer Mode в ON. 3. Закройте настройки. 4. Щёлкните правой кнопкой мыши по своему имени пользователя (в сообщении, списке участников или в профиле) → Copy User ID.

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

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

Вариант A: Интерактивная настройка (рекомендуется)

Запустите команду настройки с проводником: [code] hermes gateway setup

[/code] Выберите Discord при запросе, затем вставьте токен бота и ваш User ID, когда будет предложено.

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

Добавьте следующее в ваш файл ~/.hermes/.env: [code] # Required
DISCORD_BOT_TOKEN=your-bot-token
DISCORD_ALLOWED_USERS=284102345871466496

# Multiple allowed users (comma-separated)  
# DISCORD_ALLOWED_USERS=284102345871466496,198765432109876543

[/code] Затем запустите шлюз: [code] hermes gateway

[/code] Бот должен появиться онлайн в Discord в течение нескольких секунд. Отправьте ему сообщение — либо в ЛС, либо в канале, который он может видеть — чтобы протестировать. tip Вы можете запустить hermes gateway в фоновом режиме или как systemd-сервис для постоянной работы. См. документацию по развёртыванию для подробностей.

Справочник по настройке

Поведение Discord контролируется через два файла: ~/.hermes/.env для учётных данных и переключателей уровня окружения, и ~/.hermes/config.yaml для структурированных настроек. Переменные окружения всегда имеют приоритет над значениями config.yaml, если установлены оба.

Переменные окружения (.env)

Переменная Обязательно По умолчанию Описание
DISCORD_BOT_TOKEN Да Токен бота из Discord Developer Portal.
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_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 применяются как значения по умолчанию — если эквивалентная переменная окружения уже установлена, переменная окружения имеет приоритет.
[code]
# Discord-specific settings
discord:
require_mention: true # Require @mention in server channels
free_response_channels: "" # Comma-separated channel IDs (or YAML list)
auto_thread: true # Auto-create threads on @mention
reactions: true # Add emoji reactions during processing
ignored_channels: [] # Channel IDs where bot never responds
no_thread_channels: [] # Channel IDs where bot responds without threading
channel_prompts: {} # Per-channel ephemeral system prompts
allow_mentions: # What the bot is allowed to ping (safe defaults)
everyone: false # @everyone / @here pings (default: false)
roles: false # @role pings (default: false)
users: true # @user pings (default: true)
replied_user: true # reply-reference pings the author (default: true)
# Session isolation (applies to all gateway platforms, not just Discord)  
group_sessions_per_user: true     # Isolate sessions per user in shared channels

[/code]

discord.require_mention

Тип: boolean — По умолчанию: true Когда включено, бот отвечает в серверных каналах только при прямом @упоминании. В ЛС ответ всегда отправляется независимо от этой настройки.

discord.free_response_channels

Тип: string или list — По умолчанию: "" ID каналов, где бот отвечает на все сообщения без необходимости @упоминания. Принимает как строку с разделителями-запятыми, так и YAML-список: [code] # String format
discord:
free_response_channels: "1234567890,9876543210"

# List format  
discord:  
  free_response_channels:  
    - 1234567890  
    - 9876543210

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

discord.auto_thread

Тип: boolean — По умолчанию: true Когда включено, каждое @упоминание в обычном текстовом канале автоматически создаёт новую ветку для разговора. Это сохраняет основной канал чистым и даёт каждому разговору собственную изолированную историю сессии. После создания ветки последующие сообщения в этой ветке не требуют @упоминания — бот знает, что уже участвует. Сообщения, отправленные в существующих ветках или ЛС, не затрагиваются этой настройкой. Каналы, перечисленные в discord.free_response_channels или discord.no_thread_channels, также обходят автосоздание веток и получают встроенные ответы.

discord.reactions

Тип: boolean — По умолчанию: true Управляет добавлением ботом эмодзи-реакций на сообщения в качестве визуальной обратной связи: * 👀 добавляется, когда бот начинает обработку вашего сообщения * ✅ добавляется, когда ответ успешно доставлен * ❌ добавляется, если во время обработки произошла ошибка

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

discord.ignored_channels

Тип: string или list — По умолчанию: [] ID каналов, где бот никогда не отвечает, даже при прямом @упоминании. Это имеет наивысший приоритет — если канал находится в этом списке, бот молча игнорирует все сообщения там, независимо от require_mention, free_response_channels или любых других настроек. [code] # String format
discord:
ignored_channels: "1234567890,9876543210"

# List format  
discord:  
  ignored_channels:  
    - 1234567890  
    - 9876543210

[/code] Если родительский канал ветки находится в этом списке, сообщения в этой ветке также игнорируются.

discord.no_thread_channels

Тип: string или list — По умолчанию: [] ID каналов, где бот отвечает напрямую в канале вместо автоматического создания ветки. Это действует только когда auto_thread установлен в true (по умолчанию). В этих каналах бот отвечает встроенно, как обычное сообщение, вместо создания новой ветки. [code] discord:
no_thread_channels:
- 1234567890 # Bot responds inline here

[/code] Полезно для каналов, предназначенных для взаимодействия с ботом, где ветки создавали бы лишний шум.

discord.channel_prompts

Тип: mapping — По умолчанию: {} Поэпизодные системные промпты для каналов, которые внедряются на каждом шаге в соответствующем Discord-канале или ветке без сохранения в историю стенограммы. [code] discord:
channel_prompts:
"1234567890": |
This channel is for research tasks. Prefer deep comparisons,
citations, and concise synthesis.
"9876543210": |
This forum is for therapy-style support. Be warm, grounded,
and non-judgmental.

[/code] Поведение: * Точное совпадение ID ветки/канала имеет приоритет. * Если сообщение приходит внутри ветки или форум-поста и у этой ветки нет явной записи, Hermes обращается к ID родительского канала/форума. * Промпты применяются эпизодически во время выполнения, поэтому их изменение влияет на будущие шаги немедленно, без перезаписи прошлой истории сессии.

group_sessions_per_user

Тип: boolean — По умолчанию: true Это глобальная настройка шлюза (не специфичная для Discord), которая определяет, получают ли пользователи в одном канале изолированные истории сессий. Когда true: Алиса и Боб, общающиеся в #research, имеют отдельные разговоры с Hermes. Когда false: весь канал делит одну стенограмму разговора и один слот выполняющегося агента. [code] group_sessions_per_user: true

[/code] См. раздел Модель сессии выше для полного описания последствий каждого режима.

display.tool_progress

Тип: string — По умолчанию: "all"Значения: off, new, all, verbose Управляет отправкой ботом сообщений о прогрессе в чат во время обработки (например, "Чтение файла...", "Выполнение команды в терминале..."). Это глобальная настройка шлюза, применяемая ко всем платформам. [code] display:
tool_progress: "all" # off | new | all | verbose

[/code] * off — нет сообщений о прогрессе * new — показывать только первый вызов инструмента за шаг * all — показывать все вызовы инструментов (сокращённые до 40 символов в сообщениях шлюза) * verbose — показывать полные детали вызовов инструментов (может создавать длинные сообщения)

display.tool_progress_command

Тип: boolean — По умолчанию: false Когда включено, делает слеш-команду /verbose доступной в шлюзе, позволяя переключать режимы отображения прогресса инструментов (off → new → all → verbose → off) без редактирования config.yaml. [code] display:
tool_progress_command: true

[/code]

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

Отправьте /model без аргументов в Discord-канале, чтобы открыть выбор модели с выпадающим списком: 1. Выбор провайдера — выпадающий список Select с доступными провайдерами (до 25). 2. Выбор модели — второй выпадающий список с моделями для выбранного провайдера (до 25).

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

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

Hermes автоматически регистрирует установленные навыки как нативные Discord Application Commands. Это означает, что навыки появляются в меню автодополнения / Discord вместе со встроенными командами. * Каждый навык становится слеш-командой Discord (например, /code-review, /ascii-art) * Навыки принимают опциональный строковый параметр args * У Discord есть лимит в 100 команд приложения на одного бота — если у вас больше навыков, чем доступных слотов, дополнительные навыки пропускаются с предупреждением в логах * Навыки регистрируются во время запуска бота вместе со встроенными командами, такими как /model, /reset и /background

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

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

Если вы запускаете несколько шлюзов Hermes для одного и того же приложения Discord (например, staging + production), только один из них должен владеть регистрацией глобальных слеш-команд — иначе последний запуск выигрывает, и регистрации флапают. Выключите регистрацию слеш-команд на "ведомом" шлюзе: [code] gateway:
platforms:
discord:
extra:
slash_commands: false # default: true

[/code] Оставляя это значение true на "основном" шлюзе, вы сохраняете нормальное поведение — глобальные команды в /-меню для встроенных функций и установленных навыков.

Отправка медиа (тег send_message + MEDIA:)

Адаптер Discord поддерживает нативную загрузку файлов для всех распространённых типов медиа через инструмент send_message и встроенные теги MEDIA:/path/to/file, отправляемые агентом: Тип| Как доставляется
---|---
Изображения (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: [code] DISCORD_HOME_CHANNEL=123456789012345678
DISCORD_HOME_CHANNEL_NAME="#bot-updates"

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

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

Hermes Agent поддерживает голосовые сообщения Discord: * Входящие голосовые сообщения автоматически транскрибируются с использованием настроенного STT-провайдера: локальный faster-whisper (без ключа), Groq Whisper (GROQ_API_KEY) или OpenAI Whisper (VOICE_TOOLS_OPENAI_KEY). * Text-to-speech: Используйте /voice tts, чтобы бот отправлял голосовые ответы вместе с текстовыми. * Голосовые каналы Discord: Hermes также может подключаться к голосовому каналу, слушать говорящих пользователей и отвечать в канале.

Полное руководство по настройке и использованию см.: * Voice Mode * Use Voice Mode with Her mes

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

Форум-каналы Discord (тип 15) не принимают прямые сообщения — каждый пост в форуме должен быть веткой. Hermes автоматически определяет форум-каналы и создаёт новый пост-ветку всякий раз, когда нужно туда отправить сообщение, так что send_message, TTS, изображения, голосовые сообщения и вложения файлов работают без специальной обработки со стороны агента. * Название ветки извлекается из первой строки сообщения (префикс заголовка markdown удаляется, максимум 100 символов). Когда сообщение содержит только вложения, имя файла используется как запасное название ветки. * Вложения передаются вместе с начальным сообщением новой ветки — без отдельного шага загрузки, без частичных отправок. * Один вызов — одна ветка: каждая отправка в форум создаёт новую ветку. Последующие отправки в тот же форум будут создавать отдельные ветки. * Определение трёхуровневое: сначала кэш директории каналов, затем локальный кэш-пробник процесса и, как крайняя мера, живой запрос GET /channels/{id} (результат которого затем мемоизируется на время жизни процесса).

Обновление директории (/channels refresh на платформах, где это доступно, или перезапуск шлюза) заполняет кэш любыми форум-каналами, созданными после запуска бота.

Устранение неполадок

Бот онлайн, но не отвечает на сообщения

Причина: Message Content Intent отключён. Решение: Перейдите в Developer Portal → ваше приложение → Bot → Privileged Gateway Intents → включите Message Content Intent → Save Changes. Перезапустите шлюз.

Ошибка "Disallowed Intents" при запуске

Причина: Ваш код запрашивает намерения, не включённые в Developer Portal. Решение: Включите все три привилегированных намерения шлюза (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 и перезапустите шлюз: [code] group_sessions_per_user: true

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

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

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

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

Для серверов, где доступ управляется ролями вместо списков отдельных пользователей (команды модераторов, служба поддержки, внутренние инструменты), используйте DISCORD_ALLOWED_ROLES — список ID ролей через запятую. Любой участник с одной из этих ролей авторизован. [code] # ~/.hermes/.env — works alongside or instead of DISCORD_ALLOWED_USERS
DISCORD_ALLOWED_ROLES=987654321098765432,876543210987654321

[/code] Семантика: * ИЛИ с белым списком пользователей. Пользователь авторизован, если его ID находится в DISCORD_ALLOWED_USERS или у него есть любая роль из DISCORD_ALLOWED_ROLES. * Server Members Intent автоматически включается. Когда установлен DISCORD_ALLOWED_ROLES, бот включает Members Intent при подключении — требуется, чтобы Discord отправлял информацию о ролях вместе с записями участников. * ID ролей, а не названия. Получите их из Discord: User Settings → Advanced → Developer Mode ON, затем щёлкните правой кнопкой мыши по любой роли → Copy Role ID. * Запасной вариант для ЛС. В ЛС проверка ролей сканирует общие гильдии; пользователь с разрешённой ролью на любом общем сервере также авторизован в ЛС.

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

Управление упоминаниями

По умолчанию Hermes блокирует возможность бота пинговать @everyone, @here и упоминания ролей, даже если его ответ содержит эти токены. Это предотвращает случайно сформулированный промпт или повторённый пользовательский контент от спама по всему серверу. Пинги отдельных @пользователей и пинги через ссылку на ответ (маленький чип "ответ пользователю…") остаются включёнными, чтобы обычное общение продолжало работать. Вы можете ослабить эти настройки по умолчанию через переменные окружения или config.yaml: [code] # ~/.hermes/config.yaml
discord:
allow_mentions:
everyone: false # allow the bot to ping @everyone / @here
roles: false # allow the bot to ping @role mentions
users: true # allow the bot to ping individual @users
replied_user: true # ping the author when replying to their message

[/code] [code] # ~/.hermes/.env — env vars win over config.yaml
DISCORD_ALLOW_MENTION_EVERYONE=false
DISCORD_ALLOW_MENTION_ROLES=false
DISCORD_ALLOW_MENTION_USERS=true
DISCORD_ALLOW_MENTION_REPLIED_USER=true

[/code] tip Оставьте everyone и roles в false, если вы точно не знаете, зачем они вам нужны. LLM очень легко может сгенерировать строку @everyone внутри обычного ответа; без этой защиты это уведомит всех участников вашего сервера. Для получения дополнительной информации о безопасности вашего развёртывания Hermes Agent см. Security Guide. * Как ведёт себя Hermes * Модель Discord Gateway * Модель сессии в Discord * Прерывания и конкурентность * Шаг 1: Создание приложения Discord * Шаг 2: Создание бота * Шаг 3: Включение привилегированных намерений шлюза * Шаг 4: Получение токена бота * Шаг 5: Генерация URL приглашения * Вариант A: Использование вкладки Installation (рекомендуется) * Вариант B: Ручной URL * Требуемые разрешения * Рекомендуемые дополнительные разрешения * Целочисленные значения разрешений * Шаг 6: Приглашение на ваш сервер * Шаг 7: Поиск вашего Discord User ID * Шаг 8: Настройка Hermes Agent * Вариант A: Интерактивная настройка (рекомендуется) * Вариант B: Ручная настройка * Справочник по настройке * Переменные окружения (.env) * Файл конфигурации (config.yaml) * Интерактивный выбор модели * Нативные слеш-команды для навыков (Skills) * Отключение регистрации слеш-команд * Отправка медиа (тег send_message + MEDIA:) * Домашний канал * Использование слеш-команды * Ручная настройка * Голосовые сообщения * Форум-каналы * Устранение неполадок * Бот онлайн, но не отвечает на сообщения * Ошибка "Disallowed Intents" при запуске * Бот не видит сообщения в определённом канале * Ошибки 403 Forbidden * Бот офлайн * "User not allowed" / Бот игнорирует вас * Люди в одном канале неожиданно разделяют контекст * Безопасность * Управление доступом на основе ролей * Управление упоминаниями