74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
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
|
||
}
|