package main import ( "log/slog" "net/http" "os" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" "worktimeBot/internal/bot" ) // startWebhook registers the webhook with Telegram and starts the HTTPS/HTTP listener loop. func startWebhook(botAPI *tgbotapi.BotAPI, handler *bot.Handler, webhookURL string) { if _, err := botAPI.Request(tgbotapi.DeleteWebhookConfig{}); err != nil { slog.Error("delete webhook", "error", err) os.Exit(1) } wh, err := tgbotapi.NewWebhook(webhookURL) if err != nil { slog.Error("new webhook", "error", err) os.Exit(1) } if _, err := botAPI.Request(wh); err != nil { slog.Error("set webhook", "error", err) os.Exit(1) } updates := botAPI.ListenForWebhook("/webhook") listenAddr := getEnvDefault("BOT_LISTEN", ":8080") tlsCert := os.Getenv("BOT_TLS_CERT") tlsKey := os.Getenv("BOT_TLS_KEY") if tlsCert != "" && tlsKey != "" { slog.Info("starting HTTPS webhook", "addr", listenAddr) go func() { if err := http.ListenAndServeTLS(listenAddr, tlsCert, tlsKey, nil); err != nil { slog.Error("HTTPS server", "error", err) os.Exit(1) } }() } else { slog.Info("starting HTTP webhook (TLS by reverse proxy)", "addr", listenAddr) go func() { if err := http.ListenAndServe(listenAddr, nil); err != nil { slog.Error("HTTP server", "error", err) os.Exit(1) } }() } slog.Info("webhook registered", "url", webhookURL) for update := range updates { if update.Message != nil { handler.HandleMessage(update) } if update.CallbackQuery != nil { handler.HandleCallback(update) } } }