state.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. guildsTree.createGuildFolderNode(guildsTree.root, gf)
  44. }
  45. }
  46. guildsTree.SetCurrentNode(guildsTree.root)
  47. app.SetFocus(guildsTree)
  48. }
  49. func (s *State) onMessageCreate(m *gateway.MessageCreateEvent) {
  50. if guildsTree.selectedChannel != nil && guildsTree.selectedChannel.ID == m.ChannelID {
  51. messagesText.createMessage(&m.Message)
  52. }
  53. }