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/'
Не публикуйте токен бота и данные авторизации прокси.
Установка исправленной сборки
- Остановите сервер SCP: Secret Laboratory.
- Откройте
LabAPI/plugins/globalи переименуйте текущийDiscordLab.Bot.dllвDiscordLab.Bot.dll.backup. - Скачайте DiscordLab.Bot.dll и загрузите его в
LabAPI/plugins/global. - Скачайте websocket-sharp.dll и загрузите его в
LabAPI/dependencies/global. - Запустите сервер и проверьте консоль.
Итоговая структура должна выглядеть так:
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.
- Откройте Discord Developer Portal.
- Выберите приложение и перейдите в раздел Bot.
- В блоке Privileged Gateway Intents включите:
- Presence Intent;
- Server Members Intent;
- Message Content Intent.
- Сохраните изменения и перезапустите сервер 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 можно удалить, если новая официальная версия его не использует.
Откат изменений
- Остановите сервер.
- Удалите заменённый
DiscordLab.Bot.dll. - Переименуйте
DiscordLab.Bot.dll.backupобратно вDiscordLab.Bot.dll. - Удалите
websocket-sharp.dll, только если его не использует другой плагин. - Запустите сервер.