This commit is contained in:
ayn2op 2023-01-01 23:49:16 +05:30
parent 9f32821220
commit 63243cc97e
3 changed files with 28 additions and 26 deletions

View file

@ -1,7 +1,6 @@
package main package main
import ( import (
"fmt"
"log" "log"
"sort" "sort"
@ -12,7 +11,8 @@ import (
type GuildsTree struct { type GuildsTree struct {
*tview.TreeView *tview.TreeView
root *tview.TreeNode root *tview.TreeNode
selectedChannel *discord.Channel
} }
func newGuildsTree() *GuildsTree { func newGuildsTree() *GuildsTree {
@ -135,6 +135,9 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
return return
} }
gt.selectedChannel = c
messagesText.SetTitle(gt.channelToString(*c))
ms, err := discordState.Messages(ref, cfg.MessagesLimit) ms, err := discordState.Messages(ref, cfg.MessagesLimit)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
@ -143,12 +146,11 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
for i := len(ms) - 1; i >= 0; i-- { for i := len(ms) - 1; i >= 0; i-- {
if messagesText.newMessage(&ms[i]); err != nil { if messagesText.newMessage(&ms[i]); err != nil {
fmt.Println(err) log.Println(err)
continue continue
} }
} }
messagesText.SetTitle(gt.channelToString(*c))
app.SetFocus(messagesText) app.SetFocus(messagesText)
} }
} }

View file

@ -1,7 +1,7 @@
package main package main
import ( import (
"bytes" "fmt"
"time" "time"
"github.com/diamondburned/arikawa/v3/discord" "github.com/diamondburned/arikawa/v3/discord"
@ -10,8 +10,6 @@ import (
type MessagesText struct { type MessagesText struct {
*tview.TextView *tview.TextView
buffer bytes.Buffer
} }
func newMessagesText() *MessagesText { func newMessagesText() *MessagesText {
@ -36,20 +34,18 @@ func (mt *MessagesText) newMessage(m *discord.Message) error {
case discord.DefaultMessage, discord.InlinedReplyMessage: case discord.DefaultMessage, discord.InlinedReplyMessage:
// Region tags are square brackets that contain a region ID in double quotes // Region tags are square brackets that contain a region ID in double quotes
// https://pkg.go.dev/github.com/rivo/tview#hdr-Regions_and_Highlights // https://pkg.go.dev/github.com/rivo/tview#hdr-Regions_and_Highlights
mt.buffer.WriteString(`["`) fmt.Fprintf(mt, `["%s"]`, m.ID)
mt.buffer.WriteString(m.ID.String())
mt.buffer.WriteString(`"]`)
if m.ReferencedMessage != nil { if m.ReferencedMessage != nil {
mt.buffer.WriteString("> [::d]") fmt.Fprint(mt, "> [::d]")
// Author // Author
mt.newAuthor(m.ReferencedMessage) mt.newAuthor(m.ReferencedMessage)
// Content // Content
mt.newContent(m.ReferencedMessage) mt.newContent(m.ReferencedMessage)
mt.buffer.WriteString("[::-]") fmt.Fprint(mt, "[::-]")
mt.buffer.WriteByte('\n') fmt.Fprintln(mt)
} }
// Author // Author
@ -57,31 +53,25 @@ func (mt *MessagesText) newMessage(m *discord.Message) error {
// Timestamps // Timestamps
mt.newTimestamp(m) mt.newTimestamp(m)
// Content // Content
mt.buffer.WriteByte('\n') fmt.Fprintln(mt)
mt.newContent(m) mt.newContent(m)
// Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region. // Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region.
mt.buffer.WriteString(`[""]`) fmt.Fprint(mt, `[""]`)
} }
mt.buffer.WriteString("\n\n") fmt.Fprint(mt, "\n\n")
return nil
_, err := mt.buffer.WriteTo(mt)
return err
} }
func (mt *MessagesText) newAuthor(m *discord.Message) { func (mt *MessagesText) newAuthor(m *discord.Message) {
mt.buffer.WriteString("[blue]") fmt.Fprintf(mt, "[blue]%s[-] ", m.Author.Username)
mt.buffer.WriteString(m.Author.Username)
mt.buffer.WriteString("[-] ")
} }
func (mt *MessagesText) newTimestamp(m *discord.Message) { func (mt *MessagesText) newTimestamp(m *discord.Message) {
mt.buffer.WriteString("[::d]") fmt.Fprintf(mt, "[::d]%s[::-]", m.Timestamp.Format(time.Kitchen))
mt.buffer.WriteString(m.Timestamp.Format(time.Kitchen))
mt.buffer.WriteString("[-:-:-] ")
} }
func (mt *MessagesText) newContent(m *discord.Message) { func (mt *MessagesText) newContent(m *discord.Message) {
mt.buffer.WriteString(tview.Escape(m.Content)) fmt.Fprint(mt, tview.Escape(m.Content))
} }

View file

@ -18,6 +18,7 @@ func newState(token string) *State {
} }
s.AddHandler(s.onReady) s.AddHandler(s.onReady)
s.AddHandler(s.onMessageCreate)
return s return s
} }
@ -49,3 +50,12 @@ func (s *State) onReady(r *gateway.ReadyEvent) {
guildsTree.SetCurrentNode(guildsTree.root) guildsTree.SetCurrentNode(guildsTree.root)
app.SetFocus(guildsTree) app.SetFocus(guildsTree)
} }
func (s *State) onMessageCreate(m *gateway.MessageCreateEvent) {
if guildsTree.selectedChannel != nil {
if err := messagesText.newMessage(&m.Message); err != nil {
log.Println(err)
return
}
}
}