package main import ( "fmt" "github.com/bwmarrin/discordgo" "os" "os/signal" "syscall" ) import _ "github.com/joho/godotenv/autoload" func main() { token := os.Getenv("DISCORD_TOKEN") if token == "" { fmt.Println("Missing discord token (DISCORD_TOKEN), so bye bye!") return } discord, err := discordgo.New("Bot " + token) if err != nil { fmt.Println("Error creating Discord session: ", err) return } discord.AddHandler(ready) discord.AddHandler(reactAdd) discord.AddHandler(reactRemove) err = discord.Open() if err != nil { fmt.Println("Error opening Discord session: ", err) } // Wait here until CTRL-C or other term signal is received. fmt.Println("PinBot is running! Press CTRL-C to exit.") sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill) <-sc // Cleanly close down the Discord session. _ = discord.Close() } func ready(s *discordgo.Session, event *discordgo.Ready) { _ = s.UpdateStatus(0, "5x📌 pins a message!") } func reactAdd(s *discordgo.Session, event *discordgo.MessageReactionAdd) { messageReac(s, event.MessageReaction) } func reactRemove(s *discordgo.Session, event *discordgo.MessageReactionRemove) { messageReac(s, event.MessageReaction) } func messageReac(s *discordgo.Session, event *discordgo.MessageReaction) { if event.Emoji.Name == "📌" { msg, err := s.ChannelMessage(event.ChannelID, event.MessageID) if err != nil { return } for _, reaction := range msg.Reactions { if reaction.Emoji.Name == "📌" { var msgErr error if reaction.Count >= 5 { msgErr = s.ChannelMessagePin(event.ChannelID, event.MessageID) } else if reaction.Count <= 3 { msgErr = s.ChannelMessageUnpin(event.ChannelID, event.MessageID) } if msgErr != nil { fmt.Println("Error: ", msgErr) } break } } } }