main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "log"
  6. "os"
  7. "path/filepath"
  8. "github.com/rivo/tview"
  9. )
  10. var (
  11. token string
  12. config *Config
  13. discordState *State
  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. path, err := os.UserCacheDir()
  23. if err != nil {
  24. log.Fatal(err)
  25. }
  26. path = filepath.Join(path, name)
  27. err = os.MkdirAll(path, os.ModePerm)
  28. if err != nil {
  29. log.Fatal(err)
  30. }
  31. path = filepath.Join(path, "logs.txt")
  32. f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
  33. if err != nil {
  34. log.Fatal(err)
  35. }
  36. log.SetOutput(f)
  37. log.SetFlags(log.LstdFlags | log.Llongfile)
  38. }
  39. func main() {
  40. flag.Parse()
  41. var err error
  42. config, err = newConfig()
  43. if err != nil {
  44. log.Fatal(err)
  45. }
  46. // Initialize UI
  47. guildsTree = newGuildsTree()
  48. messagesText = newMessagesText()
  49. messageInput = newMessageInput()
  50. discordState = newState(token)
  51. err = discordState.Open(context.Background())
  52. if err != nil {
  53. log.Fatal(err)
  54. }
  55. right := tview.NewFlex()
  56. right.SetDirection(tview.FlexRow)
  57. right.AddItem(messagesText, 0, 1, false)
  58. right.AddItem(messageInput, 3, 1, false)
  59. // The guilds tree is always focused first at start-up.
  60. flex.AddItem(guildsTree, 0, 1, true)
  61. flex.AddItem(right, 0, 4, false)
  62. app.EnableMouse(config.Mouse)
  63. app.SetRoot(flex, true)
  64. err = app.Run()
  65. if err != nil {
  66. log.Fatal(err)
  67. }
  68. }