package main import ( "fmt" "log" "os" "os/signal" "syscall" "velox-bot/internal/bot" "velox-bot/internal/commands" "velox-bot/internal/config" "velox-bot/internal/db" "velox-bot/internal/db/repos/levelrepo" "velox-bot/internal/db/repos/projectsrepo" "velox-bot/internal/db/repos/rpsrepo" "velox-bot/internal/db/repos/schedulerepo" "velox-bot/internal/db/repos/settingsrepo" "velox-bot/internal/db/repos/welcomerepo" "velox-bot/internal/db/repos/twitchrepo" "velox-bot/internal/db/repos/usersettingsrepo" "velox-bot/internal/db/services" "velox-bot/internal/db/services/level" "velox-bot/internal/db/services/levelsettings" "velox-bot/internal/db/services/meeting" "velox-bot/internal/db/services/projects" "velox-bot/internal/db/services/rps" "velox-bot/internal/db/services/schedule" "velox-bot/internal/db/services/twitch" "velox-bot/internal/db/services/usersettings" "velox-bot/internal/db/services/welcome" ) func main() { config, err := config.LoadConfig() if err != nil { log.Fatalf("Error loading config: %v", err) return } db, err := db.NewDB(config) if err != nil { log.Fatalf("Error creating database: %v", err) return } defer db.Close() levelRepo := levelrepo.NewRepo(db) settingsRepo := settingsrepo.NewRepo(db) rpsRepo := rpsrepo.NewRepo(db) projectsRepo := projectsrepo.NewRepo(db) scheduleRepo := schedulerepo.NewRepo(db) userSettingsRepo := usersettingsrepo.NewRepo(db) welcomeRepo := welcomerepo.NewRepo(db) twitchRepo := twitchrepo.NewRepo(db) levelService := level.New(levelRepo, settingsRepo) levelSettingsService := levelsettings.New(settingsRepo) meetingService := meeting.New(settingsRepo) scheduleService := schedule.New(scheduleRepo) userSettingsService := usersettings.New(userSettingsRepo) projectsService := projects.New(projectsRepo) rpsService := rps.New(rpsRepo) twitchService := twitch.New(twitchRepo, config.TwitchClientID) welcomeService := welcome.New(welcomeRepo) services := services.NewServices(levelService, levelSettingsService, meetingService, scheduleService, userSettingsService, projectsService, rpsService, twitchService, welcomeService) bot, err := bot.NewBot(config.BotToken, config.AppID, config.GuildID, config.LavalinkHost, config.LavalinkPass, commands.AllCommands, services) if err != nil { log.Fatalf("Error creating bot: %v", err) return } err = bot.Start() if err != nil { log.Fatalf("Error starting bot: %v", err) } defer bot.Close() fmt.Println("Bot is running...") sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt) <-sc }