From 4a11a5296976bab414bf10f78cc6efcac5f67ca1 Mon Sep 17 00:00:00 2001 From: Khinshan Khan Date: Sat, 8 Mar 2025 19:43:43 -0500 Subject: [PATCH] create broken but simple bot to log messages --- cmd/bot/main.go | 75 +++++++++++++++++++++++++++++++++++++++++++++++-- go.mod | 8 ++++++ go.sum | 14 +++++++++ 3 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 go.sum diff --git a/cmd/bot/main.go b/cmd/bot/main.go index cec9cb5..f67f78c 100644 --- a/cmd/bot/main.go +++ b/cmd/bot/main.go @@ -1,7 +1,78 @@ package main -import "fmt" +import ( + "fmt" + "os" + "os/signal" + "syscall" + + "github.com/bwmarrin/discordgo" + "github.com/joho/godotenv" +) func main() { - fmt.Println("Hello there.") + err := godotenv.Load() + if err != nil { + fmt.Println("Error loading .env file") + return + } + + botToken := os.Getenv("DISCORD_BOT_TOKEN") + if botToken == "" { + fmt.Println("Missing variable in .env") + return + } + + // initialize bot session + dg, err := discordgo.New("Bot " + botToken) + if err != nil { + fmt.Println("Error creating Discord session,", err) + return + } + + // open WebSocket connection + dg.AddHandler(readyHandler) + dg.AddHandler(messageCreate) + err = dg.Open() + if err != nil { + fmt.Println("Error opening connection,", err) + return + } + + // wait here until CTRL-C or other term signal is received. + fmt.Println("Bot is now running. Press CTRL-C to exit.") + sc := make(chan os.Signal, 1) + signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt) + <-sc + + // cleanly close down the Discord session + dg.Close() +} + +func readyHandler(s *discordgo.Session, r *discordgo.Ready) { + fmt.Println("Ready to rumble!") +} + +// This function will be called (due to AddHandler above) every time a new +// message is created on any channel that the authenticated bot has access to. +func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { + + // Ignore all messages created by the bot itself + // This isn't required in this specific example but it's a good practice. + if m.Author.ID == s.State.User.ID { + return + } + + // Ugh message is blank, must be some weird intents thing? + fmt.Println(m.Author.Username + " sent: " + m.Content) + + // If the message is "ping" reply with "Pong!" + if m.Content == "ping" { + s.ChannelMessageSend(m.ChannelID, "Pong!") + } + + // If the message is "pong" reply with "Ping!" + if m.Content == "pong" { + s.ChannelMessageSend(m.ChannelID, "Ping!") + } } diff --git a/go.mod b/go.mod index 6255181..f5cb850 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,11 @@ module github.com/khinshankhan/swiftspiracy go 1.23.4 + +require ( + github.com/bwmarrin/discordgo v0.28.1 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/joho/godotenv v1.5.1 // indirect + golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect + golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..1a619be --- /dev/null +++ b/go.sum @@ -0,0 +1,14 @@ +github.com/bwmarrin/discordgo v0.28.1 h1:gXsuo2GBO7NbR6uqmrrBDplPUx2T3nzu775q/Rd1aG4= +github.com/bwmarrin/discordgo v0.28.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=