twitch-core.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "log"
  7. "os"
  8. "time"
  9. "github.com/nicklaw5/helix"
  10. )
  11. func SetTwitchKeyEnvVariable() {
  12. tk, err := os.Open("X")
  13. if err != nil {
  14. log.Println(err)
  15. os.Exit(1)
  16. }
  17. tkbyte, err := io.ReadAll(tk)
  18. if err != nil {
  19. log.Println(err)
  20. os.Exit(1)
  21. }
  22. os.Setenv("TWITCH_KEY", "oauth:"+string(tkbyte))
  23. }
  24. func RenewTokensLoop() {
  25. defer func() {
  26. r := recover()
  27. if r != nil {
  28. log.Println(r)
  29. }
  30. monitor <- 7
  31. }()
  32. for {
  33. RenewTokens()
  34. time.Sleep(1 * time.Hour)
  35. }
  36. }
  37. func RenewTokens() error {
  38. file, err := os.Open("XR")
  39. if err != nil {
  40. log.Println(err)
  41. return err
  42. }
  43. defer file.Close()
  44. scanner := bufio.NewScanner(file)
  45. scanner.Scan()
  46. refreshtoken := scanner.Text()
  47. if err := scanner.Err(); err != nil {
  48. log.Println(err)
  49. return err
  50. }
  51. client, err := helix.NewClient(&helix.Options{
  52. ClientID: os.Getenv("CLIENT_ID"),
  53. ClientSecret: os.Getenv("CLIENT_SECRET"),
  54. })
  55. if err != nil {
  56. log.Println("ERROR MAKIGN NEW HELIX CLIENT")
  57. log.Println(err)
  58. return err
  59. }
  60. resp, err := client.RefreshUserAccessToken(refreshtoken)
  61. if err != nil {
  62. log.Println("ERROR REFRESHING CREDENTIALS")
  63. log.Println(err)
  64. return err
  65. }
  66. os.Remove("X")
  67. keyFile, err := os.Create("X")
  68. if err != nil {
  69. log.Println(err)
  70. return err
  71. }
  72. fmt.Println("RESP:", resp.Data.AccessToken)
  73. if resp.Data.AccessToken == "" {
  74. os.Setenv("TWITCH_KEY", "oauth:"+refreshtoken)
  75. return nil
  76. }
  77. keyFile.WriteString(resp.Data.AccessToken)
  78. fmt.Println("TOKEN: ", "oauth:"+resp.Data.AccessToken)
  79. os.Setenv("TWITCH_KEY", "oauth:"+resp.Data.AccessToken)
  80. keyFile.Close()
  81. os.Remove("XR")
  82. refreshFile, err := os.Create("XR")
  83. if err != nil {
  84. log.Println(err)
  85. return err
  86. }
  87. refreshFile.WriteString(resp.Data.RefreshToken)
  88. refreshFile.Close()
  89. return nil
  90. }
  91. func MakeNewToken() {
  92. client, err := helix.NewClient(&helix.Options{
  93. ClientID: os.Getenv("CLIENT_ID"),
  94. ClientSecret: os.Getenv("CLIENT_SECRET"),
  95. RedirectURI: "http://localhost:3000",
  96. })
  97. if err != nil {
  98. log.Println("ERROR MAKIGN NEW HELIX CLIENT")
  99. log.Println(err)
  100. return
  101. }
  102. // token := client.GetUserAccessToken()
  103. urlP := new(helix.AuthorizationURLParams)
  104. urlP.Scopes = append(urlP.Scopes, "channel:bot", "chat:edit", "chat:read", "user:bot", "user:read:chat", "user:write:chat", "whispers:read", "whispers:edit")
  105. urlP.ResponseType = "token"
  106. authUrl := client.GetAuthorizationURL(urlP)
  107. fmt.Println(authUrl)
  108. // resp, err := client.RequestUserAccessToken("ABCDDD")
  109. // fmt.Println(err)
  110. // fmt.Println(resp)
  111. // fmt.Println(resp.Data.AccessToken)
  112. }