state.go 1.7 KB

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