diff --git a/main.go b/main.go index e68f756..5db4595 100644 --- a/main.go +++ b/main.go @@ -21,9 +21,12 @@ func main() { } dg.AddHandler(messageCreate) dg.AddHandler(checkPrestigeReact) + dg.AddHandler(starboardAutoReact) + dg.AddHandler(listenToStarboardReact) err = dg.Open() if err != nil { fmt.Println("Error opening Discord session:", err) + return } go listenToLevelUpdate(dg) diff --git a/starboard.go b/starboard.go new file mode 100644 index 0000000..89379a1 --- /dev/null +++ b/starboard.go @@ -0,0 +1,67 @@ +package main + +import ( + "time" + + "github.com/bwmarrin/discordgo" +) + +const starEmoji = "⭐" + +func starboardAutoReact(s *discordgo.Session, m *discordgo.MessageCreate) { + err := s.MessageReactionAdd(m.ChannelID, m.ID, starEmoji) + if err != nil { + logError(s, "starboardAutoReact", m.ChannelID, m.ID, err) + } +} + +func listenToStarboardReact(s *discordgo.Session, m *discordgo.MessageReactionAdd) { + if m.Emoji.Name != starEmoji { + return + } + messageTimestamp, err := discordgo.SnowflakeTimestamp(m.MessageID) + if err != nil { + logError(s, "listenToStarboardReact", "snowflakeTimestamp", m.MessageID, err) + return + } + if time.Now().Sub(messageTimestamp) > 24*time.Hour { + return + } + + reacter, err := s.MessageReactions(m.ChannelID, m.MessageID, starEmoji, 5) + if err != nil { + logError(s, "listenToStarboardReact", "messageReactions", m.ChannelID, m.MessageID, err) + return + } + if len(reacter) < 5 { + return + } + + msg, err := s.ChannelMessage(m.ChannelID, m.MessageID) + if err != nil { + logError(s, "listenToStarboardReact", "channelMessage", m.ChannelID, m.MessageID, err) + return + } + + color := s.State.UserColor(msg.Author.ID, m.ChannelID) + if color == 0 { + //White as fallback + color = 0xFFFFFF + } + _, err = s.ChannelMessageSendEmbed( + "645551408283648000", + &discordgo.MessageEmbed{ + Title: "Starred Message", + URL: "https://discordapp.com/channels/" + m.GuildID + "/" + m.ChannelID + "/" + m.MessageID, + Color: color, + Timestamp: messageTimestamp.Format(time.RFC3339), + Author: &discordgo.MessageEmbedAuthor{ + Name: msg.Author.Username + "#" + msg.Author.Discriminator, + IconURL: "https://cdn.discordapp.com/avatars/" + msg.Author.ID + "/" + msg.Author.Avatar + ".png", + }, + }, + ) + if err != nil { + logError(s, "listenToStarboardReact", "channelMessageSendEmbed", err) + } +}