@@ -82,6 +82,9 @@ func New(
8282 }
8383 k .SetClient (client )
8484 client .OnUserAccessTokenRefreshed (k .onUserAccessTokenRefreshed )
85+ observability .Go (ctx , func (ctx context.Context ) {
86+ k .keepAliveLoop (ctx )
87+ })
8588 return k , nil
8689}
8790
@@ -122,6 +125,28 @@ func (k *Kick) onUserAccessTokenRefreshed(
122125 })
123126}
124127
128+ func (k * Kick ) keepAliveLoop (
129+ ctx context.Context ,
130+ ) {
131+ logger .Debugf (ctx , "keepAliveLoop" )
132+ defer func () { logger .Debugf (ctx , "/keepAliveLoop" ) }()
133+
134+ t := time .NewTicker (time .Minute )
135+ defer t .Stop ()
136+ for {
137+ _ , err := k .GetClient ().GetLivestreams (k .CloseCtx , gokick .NewLivestreamListFilter ().SetBroadcasterUserIDs (int (k .Channel .UserID )))
138+ if err != nil {
139+ logger .Errorf (ctx , "unable to get my stream status: %v" , err )
140+ continue
141+ }
142+ select {
143+ case <- k .CloseCtx .Done ():
144+ return
145+ case <- t .C :
146+ }
147+ }
148+ }
149+
125150func (k * Kick ) initChatHandler (
126151 ctx context.Context ,
127152) error {
@@ -143,9 +168,12 @@ func (k *Kick) initChatHandler(
143168 logger .Errorf (ctx , "unable to initialize chat handler: %v" , err )
144169 time .Sleep (time .Second )
145170 select {
146- case <- ctx .Done ():
171+ case <- k . CloseCtx .Done ():
147172 logger .Debugf (ctx , "initChatHandler: cancelled (case #1)" )
148173 return
174+ case <- ctx .Done ():
175+ logger .Debugf (ctx , "initChatHandler: cancelled (case #2)" )
176+ return
149177 default :
150178 }
151179 chatHandler , err = k .newChatHandlerOBSOLETE (ctx , k .CurrentConfig .Config .Channel , k .onChatHandlerClose )
@@ -167,12 +195,17 @@ func (k *Kick) onChatHandlerClose(
167195 defer k .ChatHandlerLocker .Unlock ()
168196 select {
169197 case <- ctx .Done ():
198+ return
199+ case <- k .CloseCtx .Done ():
200+ return
170201 case <- time .After (time .Second ):
171202 }
172203 for {
173204 select {
174205 case <- ctx .Done ():
175206 return
207+ case <- k .CloseCtx .Done ():
208+ return
176209 default :
177210 }
178211 chatHandler , err := k .newChatHandlerOBSOLETE (ctx , k .CurrentConfig .Config .Channel , k .onChatHandlerClose )
@@ -517,6 +550,8 @@ func (k *Kick) GetChatMessagesChan(
517550 }()
518551 logger .Tracef (ctx , "GetChatMessagesChan: waiting for a message" )
519552 select {
553+ case <- k .CloseCtx .Done ():
554+ return
520555 case <- ctx .Done ():
521556 return
522557 case ev , ok := <- chatHandler .MessagesChan ():
0 commit comments