Свой relay для вебхуков. Отвечает сразу, а сообщения доставляет в фоне: если Discord вернул 429 или соединение оборвалось, сообщение подождёт в очереди и уйдёт позже. Порядок при этом сохраняется, а на каждый вебхук своя очередь: разные вебхуки отправляются параллельно и не мешают друг другу. Все разом встают на паузу только на глобальном лимите Discord.
Сборка
git clone "https://github.com/lashkinse/discord-proxy.git"
cd discord-proxy
.\build.bat # -> artifacts\publish\DiscordProxy.exe
На сервер копируете всю папку artifacts\publish: appsettings.json должен лежать рядом с exe.
Конфигурация
Всё в секции Proxy файла appsettings.json:
{
"Proxy": {
"Port": 7070,
"DbPath": "queue.db",
"MaxPayloadBytes": 65536,
"MaxPending": 10000,
"PaceSeconds": 2.2,
"MaxAttemptsNet": 48,
"MaxAttempts429": 25,
"DiscordTimeoutSeconds": 15
}
}
Значения по умолчанию обычно менять не приходится:
Port- порт, который слушает прокси;PaceSeconds- пауза между отправками одного вебхука (2.2 с - официальный лимит Discord);MaxAttempts429/MaxAttemptsNet- сколько раз повторять при rate limit и при сетевых/5xx ошибках;MaxPending- сколько сообщений максимум ждёт в очереди.
Конфиг читается только при старте: после изменения нужен перезапуск.
Запуск
.\DiscordProxy.exe
.\DiscordProxy.exe --Proxy:Port=8080 --Proxy:DbPath=D:\discord\queue.db
Как служба Windows - WinSW уже внутри, ничего доустанавливать не нужно, из папки artifacts\publish в консоли от администратора:
.\install_service.bat
Служба DiscordProxySvc стартует автоматически и перезапускается через 10 секунд после падения. Логи пишутся в logs\proxy-ДАТА.log. Убрать службу:
.\uninstall_service.bat
Подключение
Меняется только хост, формат запроса остаётся дискордовским:
- https://discord.com/api/webhooks/<id>/<token>
+ http://localhost:7070/api/webhooks/<id>/<token>
Такой же адрес можно вписать в любой клиент, который умеет слать вебхуки: игровой сервер, CI-скрипт, cron-задача, домашний бот.
Проверка и диагностика
curl http://localhost:7070/health/ready
curl http://localhost:7070/stats
/stats - главный индикатор: растущий счётчик dead означает, что Discord отвергает сообщения навсегда, то есть токен неверный или вебхук удалён.
🔗 Исходный код и документация: github.com/lashkinse/discord-proxy