root.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package cmd
  2. import (
  3. "flag"
  4. "log/slog"
  5. "github.com/ayn2op/discordo/internal/config"
  6. "github.com/ayn2op/discordo/internal/consts"
  7. "github.com/ayn2op/discordo/internal/logger"
  8. "github.com/diamondburned/arikawa/v3/utils/ws"
  9. "github.com/gdamore/tcell/v2"
  10. "github.com/rivo/tview"
  11. "github.com/zalando/go-keyring"
  12. )
  13. var (
  14. discordState *State
  15. app *App
  16. )
  17. func Run() error {
  18. logLevel := flag.String("log-level", "info", "log level")
  19. var level slog.Level
  20. switch *logLevel {
  21. case "debug":
  22. ws.EnableRawEvents = true
  23. level = slog.LevelDebug
  24. case "info":
  25. level = slog.LevelInfo
  26. case "warn":
  27. level = slog.LevelWarn
  28. case "error":
  29. level = slog.LevelError
  30. }
  31. logFormat := flag.String("log-format", "text", "log format")
  32. var format logger.Format
  33. switch *logFormat {
  34. case "text":
  35. format = logger.FormatText
  36. case "json":
  37. format = logger.FormatJson
  38. }
  39. if err := logger.Load(format, level); err != nil {
  40. return err
  41. }
  42. token := flag.String("token", "", "authentication token")
  43. tok := *token
  44. if tok == "" {
  45. var err error
  46. tok, err = keyring.Get(consts.Name, "token")
  47. if err != nil {
  48. slog.Info("failed to retrieve token from keyring", "err", err)
  49. }
  50. }
  51. cfg, err := config.Load()
  52. if err != nil {
  53. return err
  54. }
  55. tview.Styles.PrimitiveBackgroundColor = tcell.GetColor(cfg.Theme.BackgroundColor)
  56. tview.Borders.Horizontal = cfg.Theme.Border.Preset.Horizontal
  57. tview.Borders.Vertical = cfg.Theme.Border.Preset.Vertical
  58. tview.Borders.TopLeft = cfg.Theme.Border.Preset.TopLeft
  59. tview.Borders.TopRight = cfg.Theme.Border.Preset.TopRight
  60. tview.Borders.BottomLeft = cfg.Theme.Border.Preset.BottomLeft
  61. tview.Borders.BottomRight = cfg.Theme.Border.Preset.BottomRight
  62. tview.Borders.HorizontalFocus = tview.Borders.Horizontal
  63. tview.Borders.VerticalFocus = tview.Borders.Vertical
  64. tview.Borders.TopLeftFocus = tview.Borders.TopLeft
  65. tview.Borders.TopRightFocus = tview.Borders.TopRight
  66. tview.Borders.BottomLeftFocus = tview.Borders.BottomLeft
  67. tview.Borders.BottomRightFocus = tview.Borders.BottomRight
  68. app = newApp(cfg)
  69. return app.run(tok)
  70. }