Verbesserung: Fehlende Fehlerbehandlung in SaveSession() und InteractionRespond() #15

Open
opened 2026-06-10 11:47:17 +00:00 by Jannis · 0 comments
Owner

Code-Qualität / Verbesserung

Beschreibung

Zwei wichtige Stellen im Code ignorieren Fehler komplett:

1. SaveSession() in db_management.go

func SaveSession(userID string, seconds int) {
    query := `INSERT INTO voice_sessions (user_id, seconds, created_at) VALUES (?, ?, ?)`
    DB.Exec(query, userID, seconds, time.Now())  // Fehler wird verworfen!
}

Wenn der DB-Insert fehlschlägt (z. B. DB locked, Disk full), bekommt der Aufrufer keine Rückmeldung und es gibt keinen Log-Eintrag. Voice-Zeit geht stillschweigend verloren.

Fix:

func SaveSession(userID string, seconds int) error {
    _, err := DB.Exec(query, userID, seconds, time.Now())
    if err != nil {
        log.Printf("Fehler beim Speichern der Session für %s: %v", userID, err)
    }
    return err
}

2. InteractionRespond() in interactionCreate()

Alle Aufrufe von s.InteractionRespond(...) ignorieren den Rückgabewert. Wenn die Antwort fehlschlägt (Timeout, API-Fehler), gibt es kein Logging.

Fix:

if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{...}); err != nil {
    log.Printf("Fehler bei InteractionRespond: %v", err)
}

Auswirkung

Ohne Fehlerbehandlung sind Probleme im Produktivbetrieb sehr schwer zu debuggen, da keine Logs vorhanden sind.

## Code-Qualität / Verbesserung ### Beschreibung Zwei wichtige Stellen im Code ignorieren Fehler komplett: #### 1. `SaveSession()` in `db_management.go` ```go func SaveSession(userID string, seconds int) { query := `INSERT INTO voice_sessions (user_id, seconds, created_at) VALUES (?, ?, ?)` DB.Exec(query, userID, seconds, time.Now()) // Fehler wird verworfen! } ``` Wenn der DB-Insert fehlschlägt (z. B. DB locked, Disk full), bekommt der Aufrufer keine Rückmeldung und es gibt keinen Log-Eintrag. Voice-Zeit geht stillschweigend verloren. **Fix:** ```go func SaveSession(userID string, seconds int) error { _, err := DB.Exec(query, userID, seconds, time.Now()) if err != nil { log.Printf("Fehler beim Speichern der Session für %s: %v", userID, err) } return err } ``` #### 2. `InteractionRespond()` in `interactionCreate()` Alle Aufrufe von `s.InteractionRespond(...)` ignorieren den Rückgabewert. Wenn die Antwort fehlschlägt (Timeout, API-Fehler), gibt es kein Logging. **Fix:** ```go if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{...}); err != nil { log.Printf("Fehler bei InteractionRespond: %v", err) } ``` ### Auswirkung Ohne Fehlerbehandlung sind Probleme im Produktivbetrieb sehr schwer zu debuggen, da keine Logs vorhanden sind.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starfour/discord-go-bot#15