From 20778e93cab53bad73b46087d31b6d5e4098c031 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Sat, 29 Jul 2023 21:31:17 -0600 Subject: [PATCH 1/3] fix timestamps --- lib/messages.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/messages.go b/lib/messages.go index e49422c..5527bf1 100644 --- a/lib/messages.go +++ b/lib/messages.go @@ -477,6 +477,7 @@ func ProcessMessage(msg discord.Message, options MessageOptions) []string { if i == 0 { options.Reply = msg.ReferencedMessage } + options.Timestamp = time.Time(msg.Timestamp) options.IsMention = isPing options.IsDM = isDM options.IsJoin = msg.Type == discord.GuildMemberJoinMessage @@ -497,6 +498,7 @@ func ProcessMessage(msg discord.Message, options MessageOptions) []string { options.Attachments = msg.Attachments options.Stickers = msg.Stickers options.Reply = msg.ReferencedMessage + options.Timestamp = time.Time(msg.Timestamp) options.IsMention = isPing options.IsDM = isDM options.IsJoin = msg.Type == discord.GuildMemberJoinMessage From 3f6a557e05f5963d31ced0301dfcea2ae9253d59 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Sat, 29 Jul 2023 22:29:55 -0600 Subject: [PATCH 2/3] typing, reactions --- commands/send.go | 2 ++ events/main.go | 1 + events/reactions.go | 56 +++++++++++++++++++++++++++++++++++++++++++++ lib/messages.go | 5 +++- main.go | 2 ++ 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 events/reactions.go diff --git a/commands/send.go b/commands/send.go index 0ba88ce..5870b21 100644 --- a/commands/send.go +++ b/commands/send.go @@ -68,6 +68,8 @@ func SendMode() { prompt = ansi.Color(prompt, "cyan+b") } + client.Typing(channel.ID) + lib.MakePrompt(prompt, true, func(input string, interrupt bool) { if input == "" { if interrupt { diff --git a/events/main.go b/events/main.go index bdd20ed..a006c57 100644 --- a/events/main.go +++ b/events/main.go @@ -8,5 +8,6 @@ func Setup(session *ningen.State) { session.PreHandler.AddHandler(Ready) session.PreHandler.AddHandler(MessageCreate) session.PreHandler.AddHandler(MessageUpdate) + session.PreHandler.AddHandler(ReactionAdd) SetupClock() } diff --git a/events/reactions.go b/events/reactions.go new file mode 100644 index 0000000..4624973 --- /dev/null +++ b/events/reactions.go @@ -0,0 +1,56 @@ +package events + +import ( + "fmt" + "time" + + "github.com/Cynosphere/comcord/lib" + "github.com/Cynosphere/comcord/state" + "github.com/diamondburned/arikawa/v3/discord" + "github.com/diamondburned/arikawa/v3/gateway" +) + +func ReactionAdd(event *gateway.MessageReactionAddEvent) { + client := state.GetClient() + currentChannel := state.GetCurrentChannel() + + if event.ChannelID.String() != currentChannel { + return + } + + emote := event.Emoji.Name + if event.Emoji.IsCustom() { + emote = ":" + emote + ":" + } + + now := time.Now() + nowSnowflake := discord.NewSnowflake(now) + + message, err := client.MessageStore.Message(event.ChannelID, event.MessageID) + if err != nil { + message, err = client.Message(event.ChannelID, event.MessageID) + if err != nil { + return + } + } + + msg := discord.Message{ + Content: fmt.Sprintf("*reacted with %s*", emote), + Author: event.Member.User, + ChannelID: event.ChannelID, + GuildID: event.GuildID, + ID: discord.MessageID(nowSnowflake), + ReferencedMessage: message, + Type: discord.InlinedReplyMessage, + Timestamp: discord.Timestamp(now), + } + + if state.IsInPrompt() { + state.AddMessageToQueue(msg) + } else { + lines := lib.ProcessMessage(msg, lib.MessageOptions{NoColor: state.HasNoColor()}) + for _, line := range lines { + fmt.Print(line) + } + } +} diff --git a/lib/messages.go b/lib/messages.go index 5527bf1..5140eee 100644 --- a/lib/messages.go +++ b/lib/messages.go @@ -301,7 +301,6 @@ func FormatMessage(options MessageOptions) []string { } } else { content := options.Content - content = ReplaceMarkdown(content, options.NoColor) if options.IsDM { name := fmt.Sprintf("*%s*", options.Name) @@ -309,6 +308,8 @@ func FormatMessage(options MessageOptions) []string { name = ansi.Color(name, "red+b") } + content = ReplaceMarkdown(content, options.NoColor) + lines = append(lines, fmt.Sprintf("%s %s\x07\n\r", name, content)) } else if utf8.RuneCountInString(content) > 1 && (strings.HasPrefix(content, "*") && strings.HasSuffix(content, "*") && !strings.HasPrefix(content, "**") && !strings.HasSuffix(content, "**")) || @@ -353,6 +354,8 @@ func FormatMessage(options MessageOptions) []string { nameColor = "yellow+b" } + content = ReplaceMarkdown(content, options.NoColor) + name := fmt.Sprintf("[%s]", options.Name) if !options.NoColor { name = ansi.Color(name, nameColor) diff --git a/main.go b/main.go index 76ace95..763d52b 100644 --- a/main.go +++ b/main.go @@ -128,7 +128,9 @@ func main() { client.AddIntents(gateway.IntentGuildPresences) client.AddIntents(gateway.IntentGuildMembers) client.AddIntents(gateway.IntentGuildMessages) + client.AddIntents(gateway.IntentGuildMessageReactions) client.AddIntents(gateway.IntentDirectMessages) + client.AddIntents(gateway.IntentDirectMessageReactions) client.AddIntents(gateway.IntentMessageContent) state.Setup(config, client) From 781402297af104421c4e1352335ec2a472788f24 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Sat, 29 Jul 2023 22:37:40 -0600 Subject: [PATCH 3/3] update readme --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8152935..e163695 100644 --- a/README.md +++ b/README.md @@ -35,20 +35,28 @@ Go is more portable than Node.js - [ ] AFK toggle (A) - [ ] Send DM (s) - [ ] Answer DM (a) + - [x] Current time (+) + - [ ] DM history (TBD) + - [ ] Reply to message (TBD) + - [ ] Toggle color (z) - [x] Message Receiving - Markdown styling - [x] Emotes - - [ ] Timestamp parsing + - [x] Timestamp parsing - [x] Mentions parsing - - [ ] Embeds in the style of commode's posted links + - [ ] Embeds + - [ ] Plain links with title = commode's posted links - [x] Messages wrapped in `*`'s or `_`'s parsed as emotes - [x] Inline DMs to replicate commode's private messages - [x] Replies - [ ] Group DMs + - [ ] Only works with user accounts, might not even be worth doing - [x] Message sending - [x] Puts incoming messages into queue whilst in send mode + - [x] Send typing + - [ ] Mentioning - [x] Configuration - [x] Write token from argv into rc file if rc file doesn't exist - [x] Default guild/channel -- [ ] Threads +- [ ] Threads/Forums - [ ] External rich presence when using bot accounts