Перейти к основному содержимому

DiscordLab для SCP:SL с поддержкой HTTP-прокси

На серверах, где доступ к Discord ограничен, DiscordLab может успешно отправлять HTTP-запросы через прокси, но не подключаться к Discord Gateway. В таком случае proxy_url настроен, однако бот остаётся не в сети.

В этой статье размещена временная совместимая сборка для DiscordLab 2.6.1. В ней используется другая реализация WebSocket и явно устанавливается современное TLS-соединение через HTTP-прокси.

Временная совместимая сборка

Это не официальный релиз DiscordLab. Перед заменой обязательно сохраните исходный DiscordLab.Bot.dll. Используйте эту сборку только с DiscordLab 2.6.1 и вернитесь на официальный релиз, когда разработчик устранит проблему.

Перед началом

DiscordLab уже должен быть установлен и настроен. Если вы устанавливаете его впервые, сначала воспользуйтесь официальной инструкцией DiscordLab.

Убедитесь, что прокси указан в конфигурации DiscordLab в формате URL:

proxy_url: 'http://HOST:PORT/'

Не публикуйте токен бота и данные авторизации прокси.

Установка исправленной сборки

  1. Остановите сервер SCP: Secret Laboratory.
  2. Откройте LabAPI/plugins/global и переименуйте текущий DiscordLab.Bot.dll в DiscordLab.Bot.dll.backup.
  3. Скачайте DiscordLab.Bot.dll и загрузите его в LabAPI/plugins/global.
  4. Скачайте websocket-sharp.dll и загрузите его в LabAPI/dependencies/global.
  5. Запустите сервер и проверьте консоль.

Итоговая структура должна выглядеть так:

LabAPI/
├── plugins/
│ └── global/
│ └── DiscordLab.Bot.dll
└── dependencies/
└── global/
└── websocket-sharp.dll
Серверы с панелью управления

Обычно папка LabAPI находится внутри .config/SCP Secret Laboratory/. Корневой путь может отличаться в разных панелях, но каталоги plugins/global и dependencies/global остаются теми же.

Включение Gateway Intents

После исправления WebSocket Discord может закрывать соединение с ошибкой 4014, если бот запрашивает выключенные privileged intents.

  1. Откройте Discord Developer Portal.
  2. Выберите приложение и перейдите в раздел Bot.
  3. В блоке Privileged Gateway Intents включите:
    • Presence Intent;
    • Server Members Intent;
    • Message Content Intent.
  4. Сохраните изменения и перезапустите сервер SCP:SL.

DiscordLab 2.6.1 запрашивает все Gateway Intents, поэтому нужны все три переключателя. В документации Discord код 4014 означает попытку использовать запрещённый intent.

Проверка подключения

При успешном подключении через прокси в журнале появляется ответ, похожий на этот:

HTTP/1.1 101 Switching Protocols
Connection: upgrade

После этого бот должен появиться в сети. Если для диагностики вы включили debug: true, верните значение false, когда убедитесь, что всё работает.

Возможные ошибки

Плагин не может загрузить websocket-sharp

Если в консоли указано Could not load file or assembly 'websocket-sharp', проверьте, что websocket-sharp.dll загружен в LabAPI/dependencies/global, а не в папку плагина, и перезапустите сервер.

WebSocket остаётся закрытым

Проверьте следующее:

  • proxy_url начинается с http://, адрес и порт указаны верно;
  • прокси поддерживает метод HTTP CONNECT к gateway.discord.gg:443;
  • установлены оба DLL-файла с этой страницы;
  • после замены файлов сервер был полностью перезапущен.

Появляется ошибка 4014

Включите все три privileged gateway intents в Discord Developer Portal. Права бота на Discord-сервере и Gateway Intents — разные настройки: выдача права Administrator не включает intents.

Сервер один раз заработал, а затем снова перестал

Верните совместимую сборку и проверьте, не заменило ли её автообновление DiscordLab. Пока используется временная сборка, установите:

auto_update: false

После выхода совместимого официального релиза DiscordLab снова включите обновления. Временный websocket-sharp.dll можно удалить, если новая официальная версия его не использует.

Откат изменений

  1. Остановите сервер.
  2. Удалите заменённый DiscordLab.Bot.dll.
  3. Переименуйте DiscordLab.Bot.dll.backup обратно в DiscordLab.Bot.dll.
  4. Удалите websocket-sharp.dll, только если его не использует другой плагин.
  5. Запустите сервер.