twitch-core.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package main
  2. import (
  3. "bufio"
  4. "io"
  5. "log"
  6. "os"
  7. "time"
  8. "github.com/nicklaw5/helix"
  9. )
  10. func SetTwitchKeyEnvVariable() {
  11. tk, err := os.Open("X")
  12. if err != nil {
  13. log.Println(err)
  14. os.Exit(1)
  15. }
  16. tkbyte, err := io.ReadAll(tk)
  17. if err != nil {
  18. log.Println(err)
  19. os.Exit(1)
  20. }
  21. os.Setenv("TWITCH_KEY", "oauth:"+string(tkbyte))
  22. }
  23. func RenewTokensLoop() {
  24. defer func() {
  25. r := recover()
  26. if r != nil {
  27. log.Println(r)
  28. }
  29. monitor <- 7
  30. }()
  31. for {
  32. time.Sleep(1 * time.Hour)
  33. RenewTokens()
  34. }
  35. }
  36. func RenewTokens() {
  37. file, err := os.Open("XR")
  38. if err != nil {
  39. log.Println(err)
  40. return
  41. }
  42. defer file.Close()
  43. scanner := bufio.NewScanner(file)
  44. scanner.Scan()
  45. refreshtoken := scanner.Text()
  46. if err := scanner.Err(); err != nil {
  47. log.Println(err)
  48. return
  49. }
  50. client, err := helix.NewClient(&helix.Options{
  51. ClientID: os.Getenv("CLIENT_ID"),
  52. ClientSecret: os.Getenv("CLIENT_SECRET"),
  53. })
  54. if err != nil {
  55. log.Println("ERROR MAKIGN NEW HELIX CLIENT")
  56. log.Println(err)
  57. return
  58. }
  59. resp, err := client.RefreshUserAccessToken(refreshtoken)
  60. if err != nil {
  61. log.Println("ERROR REFRESHING CREDENTIALS")
  62. log.Println(err)
  63. return
  64. }
  65. os.Remove("X")
  66. keyFile, err := os.Create("X")
  67. if err != nil {
  68. log.Println(err)
  69. return
  70. }
  71. keyFile.WriteString(resp.Data.AccessToken)
  72. os.Setenv("TWITCH_KEY", "oauth:"+resp.Data.AccessToken)
  73. keyFile.Close()
  74. os.Remove("XR")
  75. refreshFile, err := os.Create("XR")
  76. if err != nil {
  77. log.Println(err)
  78. return
  79. }
  80. refreshFile.WriteString(resp.Data.RefreshToken)
  81. refreshFile.Close()
  82. }