diff --git a/main.go b/main.go index 5ffaae8..02125c5 100644 --- a/main.go +++ b/main.go @@ -427,68 +427,128 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: msg, Flags: discordgo.MessageFlagsEphemeral}}) case "setlobby": + // Admin-Check zuerst 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}}) + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "❌ Nur Administratoren dürfen das.", + Flags: discordgo.MessageFlagsEphemeral, + }, + }) return } + + // Option "name" lesen var name string for _, o := range data.Options { if o.Name == "name" { name = o.StringValue() + break } } if name == "" { - _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: "Bitte gib einen Namen an.", Flags: discordgo.MessageFlagsEphemeral}}) + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "Bitte gib einen Namen an.", + Flags: discordgo.MessageFlagsEphemeral, + }, + }) return } + + // speichern 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": - 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.Printf("saveGuildCfgs failed: %v", err) + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "⚠️ Lobby-Name gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.", + Flags: discordgo.MessageFlagsEphemeral, + }, + }) return } + + // Antwort <= 3s + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "✅ Lobby-Name aktualisiert auf: " + name, + Flags: discordgo.MessageFlagsEphemeral, + }, + }) + + case "setcategory": + // Admin-Check zuerst + 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, + }, + }) + return + } + + // Option "name" lesen var name string for _, o := range data.Options { if o.Name == "name" { name = o.StringValue() + break } } if name == "" { - _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: "Bitte gib einen Namen an.", Flags: discordgo.MessageFlagsEphemeral}}) + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "Bitte gib einen Namen an.", + Flags: discordgo.MessageFlagsEphemeral, + }, + }) return } + + // speichern 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": - // 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) + log.Printf("saveGuildCfgs failed: %v", err) + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "⚠️ Kategorie-Name gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.", + Flags: discordgo.MessageFlagsEphemeral, + }, + }) return } - // Admin-Check + // Antwort <= 3s + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "✅ Kategorie-Name aktualisiert auf: " + name, + Flags: discordgo.MessageFlagsEphemeral, + }, + }) + + case "settimeout": + // Admin-Check zuerst if !isGuildAdmin(s, guildID, i.User, i.Member) { - _, _ = s.FollowupMessageCreate(i.AppID, i.Token, true, &discordgo.WebhookParams{ - Content: "❌ Nur Administratoren dürfen das.", + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "❌ Nur Administratoren dürfen das.", + Flags: discordgo.MessageFlagsEphemeral, + }, }) return } @@ -496,9 +556,13 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter // minutes lesen minutes := int64(getCfg(guildID).TimeoutMin) for _, o := range data.Options { - if o.Name == "minutes" { minutes = o.IntValue() } + if o.Name == "minutes" { + minutes = o.IntValue() + } + } + if minutes < 1 { + minutes = 1 } - if minutes < 1 { minutes = 1 } // speichern cfgMu.Lock() @@ -506,16 +570,25 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter cfgMu.Unlock() if err := saveGuildCfgs(); err != nil { log.Printf("saveGuildCfgs failed: %v", err) - _, _ = s.FollowupMessageCreate(i.AppID, i.Token, true, &discordgo.WebhookParams{ - Content: "⚠️ Timeout gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.", + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "⚠️ Timeout gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.", + Flags: discordgo.MessageFlagsEphemeral, + }, }) return } - // final reply - _, _ = s.FollowupMessageCreate(i.AppID, i.Token, true, &discordgo.WebhookParams{ - Content: fmt.Sprintf("✅ Timeout auf %d Minuten gesetzt.", minutes), + // Antwort <= 3s + _ = 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? requester := i.User