initial commit
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user