package main import ( "context" "log" "os" "os/signal" "syscall" "telegramvpn/internal/bot" "telegramvpn/internal/config" "telegramvpn/internal/db" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" "github.com/joho/godotenv" ) func main() { _ = godotenv.Load() cfg, err := config.Load() if err != nil { log.Fatal(err) } ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() database, err := db.Connect(ctx, cfg.DatabaseURL) if err != nil { log.Fatal(err) } defer database.Close() api, err := tgbotapi.NewBotAPI(cfg.BotToken) if err != nil { log.Fatalf("не удалось подключиться к Telegram: %v", err) } api.Debug = cfg.BotDebug log.Printf("бот @%s запущен, админ ID %d, панель %q, postgres ok", api.Self.UserName, cfg.TelegramAdminID, cfg.RemnawavePanelURL) handler := bot.NewHandler(cfg, api, database) handler.RegisterCommands() u := tgbotapi.NewUpdate(0) u.Timeout = 60 for { select { case <-ctx.Done(): log.Println("остановка бота…") return case update, ok := <-api.GetUpdatesChan(u): if !ok { return } handler.HandleUpdate(update) } } }