ui.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package util
  2. import (
  3. "strings"
  4. "github.com/ayntgl/discordgo"
  5. "github.com/rivo/tview"
  6. )
  7. func GetNodeByReference(treeView *tview.TreeView, r interface{}) (mn *tview.TreeNode) {
  8. treeView.GetRoot().Walk(func(n, _ *tview.TreeNode) bool {
  9. if n.GetReference() == r {
  10. mn = n
  11. return false
  12. }
  13. return true
  14. })
  15. return
  16. }
  17. func ChannelToString(c *discordgo.Channel) string {
  18. var repr string
  19. if c.Name != "" {
  20. repr = "#" + c.Name
  21. } else if len(c.Recipients) == 1 {
  22. rp := c.Recipients[0]
  23. repr = rp.Username + "#" + rp.Discriminator
  24. } else {
  25. rps := make([]string, len(c.Recipients))
  26. for i, r := range c.Recipients {
  27. rps[i] = r.Username + "#" + r.Discriminator
  28. }
  29. repr = strings.Join(rps, ", ")
  30. }
  31. return repr
  32. }
  33. func CreateChannelNode(s *discordgo.State, c *discordgo.Channel) *tview.TreeNode {
  34. var cn *tview.TreeNode
  35. switch c.Type {
  36. case discordgo.ChannelTypeGuildText, discordgo.ChannelTypeGuildNews:
  37. tag := "[::d]"
  38. if ChannelIsUnread(s, c) {
  39. tag = "[::b]"
  40. }
  41. cn = tview.NewTreeNode(tag + ChannelToString(c) + "[::-]").
  42. SetReference(c.ID)
  43. case discordgo.ChannelTypeGuildCategory:
  44. cn = tview.NewTreeNode(c.Name).
  45. SetReference(c.ID)
  46. }
  47. return cn
  48. }