From 9898fab7f95ec50d925e342993c6f427e85ee31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=93=D1=80=D0=B0=D1=87?= =?UTF-8?q?=D1=91=D0=B2?= Date: Fri, 27 Mar 2026 04:56:12 +0300 Subject: [PATCH] add telegram timeout error connection add mtproxy send --- main.go | 11 ++++++++++- telegram/bot.go | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 1125746..bdd93e0 100644 --- a/main.go +++ b/main.go @@ -150,6 +150,7 @@ func init() { telegram.AllowConfRequest = flagTelegramAllowConfRequest telegram.FloodWait = flagTelegramFloodWait telegram.LogLevel = lvl + telegram.MTProxyLink = util.LookupEnvOrString("MTPROXY_LINK", "") // print only if log level is INFO or lower if lvl <= log.INFO { @@ -329,12 +330,20 @@ func initServerConfig(db store.IStore, tmplDir fs.FS) { } func initTelegram(initDeps telegram.TgBotInitDependencies) { + // Запускаем в фоновом потоке go func() { + attempt := 1 for { err := telegram.Start(initDeps) if err == nil { - break + log.Info("Telegram bot connected successfully!") + break // Успех! Выходим из бесконечного цикла } + + // Если ошибка — пишем в лог и СПИМ 5 секунд + log.Printf("Telegram connection attempt %d failed: %v. Retrying in 5 seconds...", attempt, err) + time.Sleep(5 * time.Second) + attempt++ } }() } diff --git a/telegram/bot.go b/telegram/bot.go index 7842f63..d16e31d 100644 --- a/telegram/bot.go +++ b/telegram/bot.go @@ -8,6 +8,7 @@ import ( "github.com/NicoNex/echotron/v3" "github.com/labstack/gommon/log" "github.com/ngoduykhanh/wireguard-ui/store" + "github.com/skip2/go-qrcode" ) type SendRequestedConfigsToTelegram func(db store.IStore, userid int64) []string @@ -21,7 +22,9 @@ var ( Token string AllowConfRequest bool FloodWait int + FloodWaitEnabled bool // Для отключения таймаута в ТГ LogLevel log.Lvl + MTProxyLink string // ДОБАВИЛИ НАШУ ССЫЛКУ Bot *echotron.API BotMutex sync.RWMutex @@ -147,6 +150,27 @@ func SendConfig(userid int64, clientName string, confData, qrData []byte, ignore log.Error(err) return fmt.Errorf("unable to send conf file") } + + if MTProxyLink != "" { + // Генерируем QR-код (размер 512x512, средний уровень коррекции ошибок) + mtQRData, err := qrcode.Encode(MTProxyLink, qrcode.Medium, 512) + if err == nil { + // Превращаем байты в картинку для Телеграма + mtAttachment := echotron.NewInputFileBytes("mtproxy.png", mtQRData) + + // Формируем красивое сообщение (можешь поменять текст) + caption := "🚀 Твой MTProxy для обхода блокировок: \n\n" + MTProxyLink + + // Отправляем! + _, err = Bot.SendPhoto(mtAttachment, userid, &echotron.PhotoOptions{Caption: caption}) + if err != nil { + log.Errorf("Failed to send MTProxy to user %d: %v", userid, err) + } + } else { + log.Errorf("Failed to generate MTProxy QR: %v", err) + } + } + // --- КОНЕЦ НАШЕГО БЛОКА --- return nil }