Discourse AI: руководство по интеграции бота Discord

Отказ от ответственности:
Я не создатель этой интеграции и не могу предоставлять поддержку, кроме как в рамках добросовестной помощи от сообщества. Я просто ещё один пользователь, который хотел настроить это на своём сайте, но не нашёл чёткого способа сделать это. В процессе я обнаружил ошибку, из-за чего создал PR для её исправления, однако мои знания в этой области довольно ограничены.

Как это работает (Архитектура)

Прежде чем приступать к настройке, важно понимать, что вам не нужно размещать отдельное приложение бота или запускать скрипт «бота» (например, на Node.js или Python) на вашем сервере.

Эта интеграция использует взаимодействия Discord (вебхуки) в сочетании с прогрессивным редактированием для имитации потокового опыта работы с ИИ:
  1. Действие пользователя: Пользователь вводит /ask в вашем сервере Discord.
  2. Вебхук: Discord отправляет HTTP POST-запрос напрямую на ваш сервер Discourse.
  3. Мгновенное подтверждение: Discourse мгновенно отвечает статусом «Поиск…». Это предотвращает тайм-аут «Взаимодействие не удалось» в Discord.
  4. Потоковый ответ: Фоновая задача начинает генерировать ответ ИИ. По мере того как ИИ генерирует текст, Discourse отправляет частые HTTP PATCH-запросы для редактирования сообщения в Discord в реальном времени.

Результат: Пользователи видят, как ответ печатается в реальном времени, как в ChatGPT, вместо того чтобы ждать появления одного статичного блока текста.

Ключевое преимущество: Поскольку вся логика обрабатывается внутри Discourse, не требуется дополнительная инфраструктура для поддержки. Если ваш форум работает, ваш бот тоже работает.

Это руководство подробно описывает полный процесс интеграции бота Discourse AI с сервером Discord. Оно включает конкретные инструкции по ручной регистрации слэш-команд через API, что в настоящее время требуется для обхода проблем с автоматической синхронизацией в плагине.

Требования

  • Доступ администратора Discourse: Вы должны быть администратором вашего саморазмещённого экземпляра Discourse.
  • Доступ администратора Discord: У вас должны быть права «Управление сервером» на целевом сервере Discord.
  • Discourse AI: Должен быть включён на вашем сервере Discourse.
  • Доступ к терминалу: Вам понадобится терминал для выполнения команд curl.

1. Создание приложения Discord

  1. Перейдите в Портал разработчика Discord.
  2. Нажмите Новое приложение в правом верхнем углу.
  3. Дайте приложению имя (например, «Discourse Helper») и нажмите Создать.
  4. Скопируйте учётные данные: На странице Основная информация найдите и сохраните следующее для последующего использования:

2. Настройка пользователя бота

  1. В левом боковом меню нажмите Bot.

  2. Нажмите Сбросить токен.

  3. Включите привилегированные намерения:

    • Прокрутите вниз до раздела «Privileged Gateway Intents».
    • Переключите Message Content Intent в положение ВКЛ. (Это позволяет боту читать сообщения, на которые ему нужно отвечать).
  4. Нажмите Сохранить изменения.

3. Настройка параметров Discourse

  1. Войдите в панель администратора Discourse.

  2. Перейдите в раздел АдминистрированиеПлагиныAIФункции.

  3. Найдите «discord» и нажмите на редактирование:

  4. Заполните детали:

    • AI Discord app ID: Вставьте =ApplicationId=
    • AI Discord app public key: Вставьте =PublicKey=
  5. Разрешите ваш сервер Discord:

    • Откройте приложение Discord и включите режим разработчика (Настройки пользователя → Дополнительно → Режим разработчика).
    • Нажмите правой кнопкой мыши на иконку вашего сервера в боковом меню и выберите Копировать ID сервера.
    • В настройках Discourse вставьте этот ID в поле AI Discord allowed guilds.

4. Установка конечной точки взаимодействий

  1. Сформируйте URL конечной точки: =ForumUrl=/discourse-ai/discord/interactions
  2. Вернитесь в Портал разработчика Discord.
  3. На странице Основная информация прокрутите до раздела Interactions Endpoint URL.
  4. Вставьте ваш URL и нажмите Сохранить изменения.
    • Успех: Discord отправит тестовый сигнал. Если сохранение прошло без ошибок, ваш экземпляр Discourse успешно проверил подпись.
    • Ошибка: Если вы получили ошибку, убедитесь, что AI Discord app ID и AI Discord app public key правильно сохранены в настройках Discourse.

5. Приглашение бота

  1. В Портале разработчика нажмите Installation в боковом меню.
  2. Области доступа: Установите флажки для bot и applications.commands.
  3. Разрешения бота: Установите следующие флажки:
    • Отправка сообщений
    • Встраивание ссылок
    • Прикрепление файлов
    • Чтение истории сообщений
  4. Скопируйте Ссылку для установки в верхней части страницы.
  5. Откройте эту ссылку в новой вкладке браузера и авторизуйте бота для присоединения к вашему серверу.

6. Регистрация слэш-команды (Ручной вызов API)

Важно: Имя параметра команды должно быть query.

Для Mac / Linux (Bash)

curl -X POST "https://discord.com/api/v10/applications/=ApplicationId=/commands" \
  -H "Authorization: Bot =BotToken=" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ask",
    "description": "Задать вопрос ИИ",
    "options": [
        {
            "name": "query",
            "description": "Ваш вопрос?",
            "type": 3,
            "required": true
        }
    ]
}'
  • Успешный ответ: Вы должны получить JSON-ответ, содержащий ID новой команды.
  • Ошибка 401? Убедитесь, что вы сохранили слово Bot (с пробелом) перед вашим токеном в заголовке Authorization.

7. Проверка

  1. Откройте ваш сервер Discord.
  2. Введите /ask в текстовом канале.
  3. Должно появиться меню команды. Выберите /ask и введите вопрос в поле query.
  4. Ожидаемое поведение:
    • Мгновенно: Бот отвечает «Поиск…"
    • Через несколько секунд: Сообщение обновляется ответом ИИ.

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

Ошибка Причина Решение
401 Unauthorized (в Curl) Неверный формат токена Убедитесь, что заголовок Authorization: Bot =BotToken=. Используйте токен со вкладки Bot, а не с вкладки General.
Job Exception: context must be an instance of BotContext Неверная полезная нагрузка Убедитесь, что вы используете актуальную версию; эта ошибка была исправлена в FIX: Discord Bot crash due to missing BotContext in PersonaReplier by devtekve · Pull Request #36429 · discourse/discourse · GitHub
2 лайка