2024-03-03 14:09:31 -05:00
package gueststar
import (
"context"
"encoding/json"
2024-03-07 19:41:05 -05:00
"fmt"
2024-03-03 14:09:31 -05:00
"net/http"
"net/url"
2024-03-07 20:52:42 -05:00
"go.fifitido.net/twitch/api/endpoint"
2024-03-03 14:09:31 -05:00
)
type CreateGuestStarSessionResponse struct {
// Summary of the session details.
Data [ ] Session ` json:"data" `
}
// Programmatically creates a Guest Star session on behalf of the broadcaster. Requires the broadcaster to be present in the call interface, or the call will be ended automatically.
//
// Query parameter broadcaster_id must match the user_id in the User-Access token
// Requires OAuth Scope: channel:manage:guest_star
func ( g * GuestStar ) CreateGuestStarSession ( ctx context . Context , broadcasterID string ) ( * CreateGuestStarSessionResponse , error ) {
2024-03-07 20:52:42 -05:00
v := url . Values { "broadcaster_id" : { broadcasterID } }
2024-03-03 14:09:31 -05:00
2024-03-07 20:52:42 -05:00
req , err := http . NewRequestWithContext ( ctx , http . MethodPost , endpoint . Make ( g . baseUrl , "guest_star/session" , v ) , nil )
2024-03-03 14:09:31 -05:00
if err != nil {
return nil , err
}
res , err := g . client . Do ( req )
if err != nil {
return nil , err
}
defer res . Body . Close ( )
2024-03-07 19:41:05 -05:00
statusOK := res . StatusCode >= 200 && res . StatusCode < 300
if ! statusOK {
return nil , fmt . Errorf ( "failed to create guest star session (%d)" , res . StatusCode )
}
2024-03-03 14:09:31 -05:00
var data CreateGuestStarSessionResponse
if err := json . NewDecoder ( res . Body ) . Decode ( & data ) ; err != nil {
return nil , err
}
return & data , nil
}