main.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "time"
  7. "github.com/joho/godotenv"
  8. "github.com/nicklaw5/helix"
  9. "github.com/zveinn/twitch-bot/mongowrapper"
  10. )
  11. var (
  12. monitor = make(chan int, 100)
  13. MAIN_CLIENT *IRC_CLIENT
  14. HELIX_CLIENT *helix.Client
  15. )
  16. var (
  17. TextCommands = make(map[string]string)
  18. MP3Map = make(map[string]string)
  19. EmoteMap = make(map[string]helix.Emote)
  20. )
  21. var SoundEventQueue = make(chan SoundEvent, 1000)
  22. type SoundEvent struct {
  23. // mp3/tts
  24. T string
  25. Data string
  26. }
  27. var BotEventQueue = make(chan BotEvent, 100)
  28. type BotEvent struct {
  29. // eve/?
  30. T string
  31. Data string
  32. Original string
  33. }
  34. func ProcessBotEvents() {
  35. defer func() {
  36. r := recover()
  37. if r != nil {
  38. log.Println(r)
  39. }
  40. monitor <- 12
  41. }()
  42. for s := range BotEventQueue {
  43. fmt.Printf("BOT QUEUE: len(%d), max(%d)", len(BotEventQueue), cap(BotEventQueue))
  44. switch s.T {
  45. case "eve":
  46. askTheBot(s.Data, s.Original)
  47. default:
  48. fmt.Println("UKNOWN BOT EVENT", s)
  49. }
  50. }
  51. }
  52. func ProcessSoundEvents() {
  53. defer func() {
  54. r := recover()
  55. if r != nil {
  56. log.Println(r)
  57. }
  58. monitor <- 11
  59. }()
  60. for s := range SoundEventQueue {
  61. fmt.Printf("SOUND QUEUE: len(%d), max(%d)", len(SoundEventQueue), cap(SoundEventQueue))
  62. switch s.T {
  63. case "mp3":
  64. PlayRewardMP3(s.Data)
  65. case "tts":
  66. PlayTTS(s.Data)
  67. default:
  68. fmt.Println("UKNOWN SOUND EVENT", s)
  69. }
  70. }
  71. }
  72. var TWITCH_CLIENT = new(IRC_CLIENT)
  73. func main() {
  74. err := godotenv.Load()
  75. if err != nil {
  76. log.Fatal("Error loading .env file")
  77. }
  78. MakeNewToken()
  79. os.Exit(1)
  80. fmt.Println("MONGO CONNECTING:", os.Getenv("DB"))
  81. err = mongowrapper.Connect(os.Getenv("DB"))
  82. if err != nil {
  83. log.Fatal(err)
  84. os.Exit(1)
  85. }
  86. // go captureKeys()
  87. mongowrapper.InitCollections()
  88. InitTwitchClient()
  89. BaseMSG = INIT_MSG()
  90. InitCommands()
  91. InitMP3Map()
  92. err = RenewTokens()
  93. if err != nil {
  94. fmt.Println(err)
  95. os.Exit(1)
  96. }
  97. CreateAPIClient()
  98. GetGlobalEmotes()
  99. TWITCH_CLIENT.GetAllChannelEmotes()
  100. go ProcessSoundEvents()
  101. go ProcessBotEvents()
  102. // go RenewTokensLoop()
  103. go TWITCH_CLIENT.Connect()
  104. for {
  105. select {
  106. case ID := <-monitor:
  107. log.Println("ID RETURNED: ", ID)
  108. if ID == 10 {
  109. TWITCH_CLIENT.Connect()
  110. } else if ID == 7 {
  111. go RenewTokensLoop()
  112. } else if ID == 1337 {
  113. go TWITCH_CLIENT.POST_INFO()
  114. } else if ID == 11 {
  115. go ProcessSoundEvents()
  116. } else if ID == 12 {
  117. go ProcessBotEvents()
  118. } else if ID == 13 {
  119. // go captureKeys()
  120. }
  121. default:
  122. time.Sleep(500 * time.Millisecond)
  123. }
  124. }
  125. }