Добавил прокси для Телеграм
This commit is contained in:
+28
-3
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user