Добавил прокси для Телеграм

This commit is contained in:
2026-06-14 18:56:04 +03:00
parent 2dbbb1b706
commit 5fb2f4df43
3 changed files with 35 additions and 4 deletions
+28 -3
View File
@@ -6,6 +6,7 @@ import (
"flag"
"fmt"
"net/http"
"net/url"
"os/signal"
"syscall"
"time"
@@ -135,7 +136,11 @@ func runServe(args []string) error {
if cfg.Telegram.Token == "" {
return fmt.Errorf("telegram enabled, but token is empty")
}
api, terr := tgbotapi.NewBotAPI(cfg.Telegram.Token)
tgClient, perr := telegramHTTPClient(cfg.Telegram.Proxy)
if perr != nil {
return perr
}
api, terr := tgbotapi.NewBotAPIWithClient(cfg.Telegram.Token, tgbotapi.APIEndpoint, tgClient)
if terr != nil {
logger.Error("telegram bot disabled: cannot connect", "err", terr)
} else {
@@ -182,6 +187,24 @@ func runServe(args []string) error {
return nil
}
// telegramHTTPClient собирает HTTP-клиент бота с опц. прокси. Таймаута уровня
// клиента нет намеренно — он порвал бы long-poll; вместо этого ограничиваем
// установление соединения (dial/TLS из DefaultTransport) и ожидание заголовков
// ответа с запасом над long-poll (30с в tgbot). Так мёртвый прокси не подвешивает
// ни отправку уведомлений, ни приёмный цикл навсегда — клиент переподключится.
func telegramHTTPClient(proxy string) (*http.Client, error) {
transport := http.DefaultTransport.(*http.Transport).Clone()
if proxy != "" {
proxyURL, err := url.Parse(proxy)
if err != nil {
return nil, fmt.Errorf("telegram: parse proxy %q: %w", proxy, err)
}
transport.Proxy = http.ProxyURL(proxyURL)
}
transport.ResponseHeaderTimeout = 45 * time.Second
return &http.Client{Transport: transport}, nil
}
// metadataProviders собирает включённые конфигом базы метаданных. Для
// сериалов Jellyfin привычнее tvdbid, поэтому TVDB идёт первым.
func metadataProviders(cfg *config.Config) ([]metadata.Provider, error) {
@@ -197,7 +220,9 @@ func metadataProviders(cfg *config.Config) ([]metadata.Provider, error) {
}
out = append(out, p)
}
if cfg.Metadata.TVDB.Enabled {
// TVDB/TMDB включаются ключом: если enabled, но ключ пуст — тихо
// пропускаем (сервис стартует), а не падаем.
if cfg.Metadata.TVDB.Enabled && cfg.Metadata.TVDB.APIKey != "" {
p, err := metadata.NewTVDB(metadata.TVDBConfig{
APIKey: cfg.Metadata.TVDB.APIKey,
Proxy: cfg.Metadata.TVDB.Proxy,
@@ -208,7 +233,7 @@ func metadataProviders(cfg *config.Config) ([]metadata.Provider, error) {
}
out = append(out, p)
}
if cfg.Metadata.TMDB.Enabled {
if cfg.Metadata.TMDB.Enabled && cfg.Metadata.TMDB.APIKey != "" {
p, err := metadata.NewTMDB(metadata.TMDBConfig{
APIKey: cfg.Metadata.TMDB.APIKey,
Proxy: cfg.Metadata.TMDB.Proxy,