main.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "fmt"
  6. "log"
  7. "github.com/rivo/tview"
  8. )
  9. var (
  10. token string
  11. config *Config
  12. discordState *State
  13. plugins = make(map[string]*Plugin)
  14. app = tview.NewApplication()
  15. flex = tview.NewFlex()
  16. guildsTree *GuildsTree
  17. messagesText *MessagesText
  18. messageInput *MessageInput
  19. )
  20. func init() {
  21. flag.StringVar(&token, "token", "", "The authentication token.")
  22. }
  23. func main() {
  24. flag.Parse()
  25. var err error
  26. err = loadPlugins()
  27. if err != nil {
  28. log.Fatal(err)
  29. }
  30. for _, p := range plugins {
  31. fmt.Println(p.Name())
  32. }
  33. config, err = newConfig()
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37. // Initialize UI
  38. guildsTree = newGuildsTree()
  39. messagesText = newMessagesText()
  40. messageInput = newMessageInput()
  41. discordState = newState(token)
  42. err = discordState.Open(context.Background())
  43. if err != nil {
  44. log.Fatal(err)
  45. }
  46. right := tview.NewFlex()
  47. right.SetDirection(tview.FlexRow)
  48. right.AddItem(messagesText, 0, 1, false)
  49. right.AddItem(messageInput, 3, 1, false)
  50. // The guilds tree is always focused first at start-up.
  51. flex.AddItem(guildsTree, 0, 1, true)
  52. flex.AddItem(right, 0, 4, false)
  53. app.EnableMouse(config.Mouse)
  54. app.SetRoot(flex, true)
  55. err = app.Run()
  56. if err != nil {
  57. log.Fatal(err)
  58. }
  59. }