From 2b9ed0e80451acb857d58c25c314f89a56cf1801 Mon Sep 17 00:00:00 2001 From: groot Date: Sun, 10 Aug 2025 13:35:30 +0000 Subject: [PATCH] main.go aktualisiert --- main.go | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index eca86e3..9f3ec60 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "log" "os" @@ -19,11 +20,59 @@ const ( defaultCategory = "Private Räume" ) +// Pfad zur Persistenz-Datei (überschreibbar via CONFIG_PATH) +var configPath = func() string { + if v := os.Getenv("CONFIG_PATH"); v != "" { + return v + } + return "guild_config.json" +}() + +// Persistenz der Guild-Konfiguration +func loadGuildCfgs() error { + f, err := os.Open(configPath) + if err != nil { + return err + } + defer f.Close() + + var m map[string]*GuildConfig + if err := json.NewDecoder(f).Decode(&m); err != nil { + return err + } + + cfgMu.Lock() + for k, v := range m { + guildCfgs[k] = v + } + cfgMu.Unlock() + return nil +} + +func saveGuildCfgs() error { + tmp := configPath + ".tmp" + f, err := os.Create(tmp) + if err != nil { + return err + } + enc := json.NewEncoder(f) + enc.SetIndent("", " ") + + cfgMu.RLock() + err = enc.Encode(guildCfgs) + cfgMu.RUnlock() + _ = f.Close() + if err != nil { + return err + } + return os.Rename(tmp, configPath) +} + // ===== Per-Guild Config (in-memory) ===== type GuildConfig struct { - LobbyName string - CategoryName string - TimeoutMin int + LobbyName string `json:"lobby_name"` + CategoryName string `json:"category_name"` + TimeoutMin int `json:"timeout_min"` } var ( @@ -223,6 +272,7 @@ func createPrivateVCAndMove( } go watchAndCleanup(s, guildID, newChan.ID, time.Duration(timeoutMin)*time.Minute) + log.Println("➕ Added channel for guildID: " + guildID + " with new ID: " + newChan.ID) return newChan, nil } @@ -252,6 +302,7 @@ func watchAndCleanup(s *discordgo.Session, guildID, channelID string, timeout ti } if time.Since(lastActive) >= timeout { _, _ = s.ChannelDelete(channelID) + log.Println("➖ Deleted channel for guildID: " + guildID + " with ID: " + channelID) return } } @@ -393,6 +444,9 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter cfgMu.Lock() getCfg(guildID).LobbyName = name cfgMu.Unlock() + if err := saveGuildCfgs(); err != nil { + log.Printf("Speichern fehlgeschlagen: %v", err) + } _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: "✅ Lobby-Name aktualisiert auf: " + name, Flags: discordgo.MessageFlagsEphemeral}}) case "setcategory": @@ -413,6 +467,9 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter cfgMu.Lock() getCfg(guildID).CategoryName = name cfgMu.Unlock() + if err := saveGuildCfgs(); err != nil { + log.Printf("Speichern fehlgeschlagen: %v", err) + } _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: "✅ Kategorie-Name aktualisiert auf: " + name, Flags: discordgo.MessageFlagsEphemeral}}) case "settimeout": @@ -432,6 +489,9 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter cfgMu.Lock() getCfg(guildID).TimeoutMin = int(minutes) cfgMu.Unlock() + if err := saveGuildCfgs(); err != nil { + log.Printf("Speichern fehlgeschlagen: %v", err) + } _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: fmt.Sprintf("✅ Timeout auf %d Minuten gesetzt.", minutes), Flags: discordgo.MessageFlagsEphemeral}}) case "adduser": // wer ruft auf? @@ -588,6 +648,11 @@ func main() { log.Fatal("Bitte setze DISCORD_TOKEN") } + // Persistente Konfiguration laden (optional) + if err := loadGuildCfgs(); err != nil { + log.Printf("Hinweis: Konnte %s nicht laden (%v). Starte mit Defaults.", configPath, err) + } + s, err := discordgo.New("Bot " + token) if err != nil { log.Fatalf("Session fehlgeschlagen: %v", err) @@ -634,5 +699,8 @@ func main() { } } } + if err := saveGuildCfgs(); err != nil { + log.Printf("Speichern zum Shutdown fehlgeschlagen: %v", err) + } _ = s.Close() }