main.go 1.2 KB

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