diff --git a/main.go b/main.go index fb39832..5ffaae8 100644 --- a/main.go +++ b/main.go @@ -473,26 +473,49 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: "✅ Kategorie-Name aktualisiert auf: " + name, Flags: discordgo.MessageFlagsEphemeral}}) case "settimeout": - if !isGuildAdmin(s, guildID, i.User, i.Member) { - _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: "❌ Nur Administratoren dürfen das.", Flags: discordgo.MessageFlagsEphemeral}}) + // Log + schneller ACK + log.Printf("[settimeout] guild=%s user=%s", guildID, i.Member.User.ID) + if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseDeferredChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Flags: discordgo.MessageFlagsEphemeral, + }, + }); err != nil { + log.Printf("Defer failed: %v", err) return } - var minutes int64 = int64(getCfg(guildID).TimeoutMin) + + // Admin-Check + if !isGuildAdmin(s, guildID, i.User, i.Member) { + _, _ = s.FollowupMessageCreate(i.AppID, i.Token, true, &discordgo.WebhookParams{ + Content: "❌ Nur Administratoren dürfen das.", + }) + return + } + + // minutes lesen + minutes := int64(getCfg(guildID).TimeoutMin) for _, o := range data.Options { - if o.Name == "minutes" { - minutes = o.IntValue() - } - } - if minutes < 1 { - minutes = 1 + if o.Name == "minutes" { minutes = o.IntValue() } } + if minutes < 1 { minutes = 1 } + + // speichern cfgMu.Lock() getCfg(guildID).TimeoutMin = int(minutes) cfgMu.Unlock() if err := saveGuildCfgs(); err != nil { - log.Printf("Speichern fehlgeschlagen: %v", err) + log.Printf("saveGuildCfgs failed: %v", err) + _, _ = s.FollowupMessageCreate(i.AppID, i.Token, true, &discordgo.WebhookParams{ + Content: "⚠️ Timeout gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.", + }) + return } - _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: fmt.Sprintf("✅ Timeout auf %d Minuten gesetzt.", minutes), Flags: discordgo.MessageFlagsEphemeral}}) + + // final reply + _, _ = s.FollowupMessageCreate(i.AppID, i.Token, true, &discordgo.WebhookParams{ + Content: fmt.Sprintf("✅ Timeout auf %d Minuten gesetzt.", minutes), + }) case "adduser": // wer ruft auf? requester := i.User