messages_text.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package main
  2. import (
  3. "bytes"
  4. "time"
  5. "github.com/diamondburned/arikawa/v3/discord"
  6. "github.com/rivo/tview"
  7. )
  8. type MessagesText struct {
  9. *tview.TextView
  10. buffer bytes.Buffer
  11. }
  12. func newMessagesText() *MessagesText {
  13. mt := &MessagesText{
  14. TextView: tview.NewTextView(),
  15. }
  16. mt.SetDynamicColors(true)
  17. mt.SetRegions(true)
  18. mt.SetWordWrap(true)
  19. mt.SetBorder(cfg.Theme.MessagesText.Border)
  20. padding := cfg.Theme.MessagesText.BorderPadding
  21. mt.SetBorderPadding(padding[0], padding[1], padding[2], padding[3])
  22. return mt
  23. }
  24. func (mt *MessagesText) newMessage(m *discord.Message) error {
  25. switch m.Type {
  26. case discord.DefaultMessage, discord.InlinedReplyMessage:
  27. // Region tags are square brackets that contain a region ID in double quotes
  28. // https://pkg.go.dev/github.com/rivo/tview#hdr-Regions_and_Highlights
  29. mt.buffer.WriteString(`["`)
  30. mt.buffer.WriteString(m.ID.String())
  31. mt.buffer.WriteString(`"]`)
  32. if m.ReferencedMessage != nil {
  33. mt.buffer.WriteString("> [::d]")
  34. // Author
  35. mt.newAuthor(m.ReferencedMessage)
  36. // Content
  37. mt.newContent(m.ReferencedMessage)
  38. mt.buffer.WriteString("[::-]")
  39. mt.buffer.WriteByte('\n')
  40. }
  41. // Author
  42. mt.newAuthor(m)
  43. // Timestamps
  44. mt.newTimestamp(m)
  45. // Content
  46. mt.buffer.WriteByte('\n')
  47. mt.newContent(m)
  48. // Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region.
  49. mt.buffer.WriteString(`[""]`)
  50. }
  51. mt.buffer.WriteString("\n\n")
  52. _, err := mt.buffer.WriteTo(mt)
  53. return err
  54. }
  55. func (mt *MessagesText) newAuthor(m *discord.Message) {
  56. mt.buffer.WriteString("[blue]")
  57. mt.buffer.WriteString(m.Author.Username)
  58. mt.buffer.WriteString("[-] ")
  59. }
  60. func (mt *MessagesText) newTimestamp(m *discord.Message) {
  61. mt.buffer.WriteString("[::d]")
  62. mt.buffer.WriteString(m.Timestamp.Format(time.Kitchen))
  63. mt.buffer.WriteString("[-:-:-] ")
  64. }
  65. func (mt *MessagesText) newContent(m *discord.Message) {
  66. mt.buffer.WriteString(m.Content)
  67. }