state.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "runtime"
  6. "github.com/diamondburned/arikawa/v3/api"
  7. "github.com/diamondburned/arikawa/v3/gateway"
  8. "github.com/diamondburned/arikawa/v3/state"
  9. "github.com/rivo/tview"
  10. )
  11. func init() {
  12. api.UserAgent = fmt.Sprintf("%s/%s %s/%s", name, "0.1", "arikawa", "v3")
  13. gateway.DefaultIdentity = gateway.IdentifyProperties{
  14. OS: runtime.GOOS,
  15. Browser: name,
  16. Device: "",
  17. }
  18. }
  19. type State struct {
  20. *state.State
  21. }
  22. func newState(token string) *State {
  23. s := &State{
  24. State: state.New(token),
  25. }
  26. s.AddHandler(s.onReady)
  27. s.AddHandler(s.onMessageCreate)
  28. return s
  29. }
  30. func (s *State) onReady(r *gateway.ReadyEvent) {
  31. dmNode := tview.NewTreeNode("Direct Messages")
  32. guildsTree.root.AddChild(dmNode)
  33. for _, gf := range r.UserSettings.GuildFolders {
  34. /// If the ID of the guild folder is zero, the guild folder only contains single guild.
  35. if gf.ID == 0 {
  36. err := guildsTree.createGuildNodeFromID(guildsTree.root, gf.GuildIDs[0])
  37. if err != nil {
  38. log.Println(err)
  39. continue
  40. }
  41. } else {
  42. gfNode := tview.NewTreeNode("Folder")
  43. guildsTree.root.AddChild(gfNode)
  44. for _, gid := range gf.GuildIDs {
  45. err := guildsTree.createGuildNodeFromID(gfNode, gid)
  46. if err != nil {
  47. log.Println(err)
  48. continue
  49. }
  50. }
  51. }
  52. }
  53. guildsTree.SetCurrentNode(guildsTree.root)
  54. app.SetFocus(guildsTree)
  55. }
  56. func (s *State) onMessageCreate(m *gateway.MessageCreateEvent) {
  57. if guildsTree.selectedChannel != nil && guildsTree.selectedChannel.ID == m.ChannelID {
  58. err := messagesText.createMessage(&m.Message)
  59. if err != nil {
  60. log.Println(err)
  61. return
  62. }
  63. }
  64. }