package main import ( "fmt" "log" "os" "os/signal" "syscall" "github.com/bwmarrin/discordgo" "github.com/joho/godotenv" ) func main() { if err := godotenv.Load(); err != nil && !os.IsNotExist(err) { log.Println("Warnung: .env-Datei konnte nicht geladen werden:", err) } token := os.Getenv("DISCORD_TOKEN") if token == "" { log.Fatal("Umgebungsvariable DISCORD_TOKEN ist nicht gesetzt") } dg, err := discordgo.New("Bot " + token) if err != nil { log.Fatal("Fehler beim Erstellen der Discord-Session:", err) } targetChannelName := os.Getenv("TARGET_CHANNEL_NAME") if targetChannelName == "" { targetChannelName = "threads-und-diskussionen" } dg.AddHandler(func(s *discordgo.Session, t *discordgo.ThreadCreate) { onThreadCreate(s, t, targetChannelName) }) // GUILDS-Intent enthält THREAD_CREATE-Events dg.Identify.Intents = discordgo.IntentsGuilds if err = dg.Open(); err != nil { log.Fatal("Fehler beim Öffnen der Verbindung:", err) } defer dg.Close() fmt.Println("Bot läuft. CTRL+C zum Beenden.") sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt) <-sc } func onThreadCreate(s *discordgo.Session, t *discordgo.ThreadCreate, targetChannelName string) { // Neu erstellte Threads haben NewlyCreated == true. // Ohne diese Prüfung feuert das Event auch beim Bot-Start für bestehende Threads. if !t.NewlyCreated { return } channels, err := s.GuildChannels(t.GuildID) if err != nil { log.Println("Fehler beim Abrufen der Channels:", err) return } var targetChannelID string for _, ch := range channels { if ch.Name == targetChannelName { targetChannelID = ch.ID break } } if targetChannelID == "" { log.Printf("Channel #%s nicht gefunden\n", targetChannelName) return } threadLink := fmt.Sprintf("https://discord.com/channels/%s/%s", t.GuildID, t.ID) message := fmt.Sprintf("Neuer Thread: **%s**\n%s", t.Name, threadLink) if _, err = s.ChannelMessageSend(targetChannelID, message); err != nil { log.Println("Fehler beim Senden der Nachricht:", err) } }