package bot import ( "context" "fmt" "os" "os/signal" "github.com/bwmarrin/discordgo" ) func TheBot() { Token := os.Getenv("BOT_KEY") if Token == "" { fmt.Println("You must set DISCORD_TOKEN environment variable.") return } // Create bot session dg, err := discordgo.New("Bot " + Token) if err != nil { fmt.Println("Error creating Discord session,", err) return } dg.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsDirectMessages | discordgo.IntentsMessageContent | discordgo.IntentsGuilds // Register messageCreate as a callback for MessageCreate events dg.AddHandler(interactionCreate) // // Open the websocket and begin listening err = dg.Open() if err != nil { fmt.Println("Error opening Discord session,", err) return } // Wait here until CTRL-C or other term signal is received. fmt.Println("Bot is now running. Press CTRL-C to exit.") // Register commands, passing the session registerCommands(dg) // sc := make(chan os.Signal, 1) // signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt) // <-sc // // Cleanly close down the Discord session. // dg.Close() ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() <-ctx.Done() cleanupCommands(dg) dg.Close() } // This function will be called (due to event handler registration above) // every time a new message is created on any channel that the authed bot has access to. // func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { // // ignore bots (including self) // if m.Author == nil || m.Author.Bot { // return // } // // debug: log incoming messages so you can see them in console // fmt.Printf("msg from %s: %s\n", m.Author.Username, m.Content) // // choose the prefix you want — here I check for "!ping" // if m.Content == "!ping" { // if _, err := s.ChannelMessageSend(m.ChannelID, "Pong!"); err != nil { // fmt.Println("send error:", err) // } // } // if m.Content == "!pong" { // if _, err := s.ChannelMessageSend(m.ChannelID, "Ping!"); err != nil { // fmt.Println("send error:", err) // } // } // }