package main import ( "log" "net/http" "net/url" "os" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" "github.com/joho/godotenv" "worktimeBot/internal/bot" "worktimeBot/internal/db" "worktimeBot/pkg/i18n" ) func main() { // Load .env file if it exists (ignored when running inside Docker with env vars) _ = godotenv.Load() token := os.Getenv("BOT_TOKEN") proxyURL := os.Getenv("HTTP_PROXY") dbPath := getEnvDefault("DB_PATH", "db.sqlite3") // Build HTTP client with optional proxy var httpClient *http.Client if proxyURL != "" { parsed, err := url.Parse(proxyURL) if err != nil { log.Fatal(err) } tr := &http.Transport{Proxy: http.ProxyURL(parsed)} httpClient = &http.Client{Transport: tr} } else { httpClient = http.DefaultClient } botAPI, err := tgbotapi.NewBotAPIWithClient(token, "", httpClient) if err != nil { log.Fatal(err) } dbStore, err := db.NewStore(dbPath) if err != nil { log.Fatal(err) } translator, _ := i18n.NewTranslator("en") handler := bot.NewHandler(botAPI, dbStore, translator) webhookURL := os.Getenv("BOT_WEBHOOK_URL") if webhookURL != "" { startWebhook(botAPI, handler, webhookURL) } else { // Fallback to long‑polling u := tgbotapi.NewUpdate(0) u.Timeout = 30 updates := botAPI.GetUpdatesChan(u) for update := range updates { if update.Message != nil { handler.HandleMessage(update) } } } } func getEnvDefault(key, defaultValue string) string { if val := os.Getenv(key); val != "" { return val } return defaultValue }