messages_text.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import (
  3. "fmt"
  4. "sync"
  5. "text/template"
  6. "github.com/diamondburned/arikawa/v3/discord"
  7. "github.com/rivo/tview"
  8. )
  9. var p = sync.Pool{
  10. New: func() any {
  11. return new(template.Template)
  12. },
  13. }
  14. type MessagesText struct {
  15. *tview.TextView
  16. }
  17. func newMessagesText() *MessagesText {
  18. mt := &MessagesText{
  19. TextView: tview.NewTextView(),
  20. }
  21. mt.SetDynamicColors(true)
  22. mt.SetRegions(true)
  23. mt.SetBorder(true)
  24. mt.SetBorderPadding(cfg.BorderPadding())
  25. return mt
  26. }
  27. func (mt *MessagesText) newMessage(m *discord.Message) error {
  28. switch m.Type {
  29. case discord.DefaultMessage:
  30. // Region tags are square brackets that contain a region ID in double quotes
  31. // https://pkg.go.dev/github.com/rivo/tview#hdr-Regions_and_Highlights
  32. fmt.Fprintf(mt, `["%s"]`, m.ID)
  33. if m.ReferencedMessage != nil {
  34. fmt.Fprintf(mt, "[blue::bd]%s[-:-:-] [::-]", m.ReferencedMessage.Author.Username)
  35. fmt.Fprint(mt, m.ReferencedMessage.Content)
  36. fmt.Fprintln(mt)
  37. }
  38. fmt.Fprintf(mt, "[blue::b]%s[-:-:-] ", m.Author.Username)
  39. fmt.Fprint(mt, m.Content)
  40. // Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region.
  41. fmt.Fprint(mt, `[""]`)
  42. fmt.Fprintln(mt)
  43. }
  44. return nil
  45. }