From b0f0c587c9a5afd6c9b7ebed672e2ad8a15f0192 Mon Sep 17 00:00:00 2001 From: groot Date: Wed, 13 Aug 2025 20:11:51 +0000 Subject: [PATCH] main.go aktualisiert --- main.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/main.go b/main.go index c59c49d..a32caa1 100644 --- a/main.go +++ b/main.go @@ -174,6 +174,19 @@ func initDB() { addLanguageColumnIfNotExists() ensureLobbyRuleTable() + _, _ = db.Exec(` + CREATE TABLE IF NOT EXISTS eventlog( + id INTEGER PRIMARY KEY AUTOINCREMENT, + guild_id TEXT NOT NULL, + type TEXT NOT NULL, -- z.B. 'vc_created' | 'vc_deleted' | 'member_moved' + channel_id TEXT, + user_id TEXT, + ts INTEGER NOT NULL, -- unix seconds + extra TEXT + ); + CREATE INDEX IF NOT EXISTS idx_eventlog_guild_ts ON eventlog(guild_id, ts DESC); + `) + } // Close DB connection @@ -183,6 +196,21 @@ func closeDB() { } } +func logEvent(gid, typ, chID, userID string, extra any) { + if db == nil { + return + } + var extraJSON string + if extra != nil { + if b, err := json.Marshal(extra); err == nil { + extraJSON = string(b) + } + } + _, _ = db.Exec(`INSERT INTO eventlog(guild_id, type, channel_id, user_id, ts, extra) + VALUES(?,?,?,?,?,?)`, + gid, typ, chID, userID, time.Now().Unix(), extraJSON) +} + // Laden der Guild-Konfiguration mit Sprache func loadGuildCfgs() error { rows, err := db.Query("SELECT guild_id, lobby_name, category_name, timeout_min, language FROM guild_config") @@ -500,6 +528,10 @@ func createPrivateVCAndMove( }) if err != nil { return nil, fmt.Errorf("VC-Anlage fehlgeschlagen: %w", err) + } else { + logEvent(guildID, "vc_created", newChan.ID, requesterID, map[string]any{ + "name": newChan.Name, "timeout_min": timeoutMin, + }) } // optionaler Move @@ -532,6 +564,9 @@ func createPrivateVCAndMove( if moveErr != nil { log.Printf("Move endgültig fehlgeschlagen: %v", moveErr) } + if moveErr == nil { + logEvent(guildID, "member_moved", newChan.ID, requesterID, nil) + } }() } @@ -567,6 +602,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) + logEvent(guildID, "vc_deleted", channelID, "", nil) return } }