[core] Add support for stream schedule to twitch lib

Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
Knut Ahlers 2023-07-27 12:29:54 +02:00
parent ebfad40b98
commit 3f64d60c43
Signed by: luzifer
GPG Key ID: D91C3E91E4CAD6F5

61
pkg/twitch/schedule.go Normal file
View File

@ -0,0 +1,61 @@
package twitch
import (
"context"
"fmt"
"net/http"
"strings"
"time"
"github.com/pkg/errors"
)
type (
// ChannelStreamSchedule represents the schedule of a channels with
// its segments represening single planned streams
ChannelStreamSchedule struct {
Segments []struct {
ID string `json:"id"`
StartTime time.Time `json:"start_time"`
EndTime time.Time `json:"end_time"`
Title string `json:"title"`
CanceledUntil *time.Time `json:"canceled_until"`
Category struct {
ID string `json:"id"`
Name string `json:"name"`
} `json:"category"`
IsRecurring bool `json:"is_recurring"`
} `json:"segments"`
BroadcasterID string `json:"broadcaster_id"`
BroadcasterName string `json:"broadcaster_name"`
BroadcasterLogin string `json:"broadcaster_login"`
Vacation struct {
StartTime time.Time `json:"start_time"`
EndTime time.Time `json:"end_time"`
} `json:"vacation"`
}
)
// GetChannelStreamSchedule gets the broadcasters streaming schedule
func (c *Client) GetChannelStreamSchedule(ctx context.Context, channel string) (*ChannelStreamSchedule, error) {
channelID, err := c.GetIDForUsername(strings.TrimLeft(channel, "#@"))
if err != nil {
return nil, errors.Wrap(err, "getting channel user-id")
}
var payload struct {
Data *ChannelStreamSchedule `json:"data"`
}
return payload.Data, errors.Wrap(
c.Request(ClientRequestOpts{
AuthType: AuthTypeAppAccessToken,
Context: ctx,
Method: http.MethodGet,
OKStatus: http.StatusOK,
Out: &payload,
URL: fmt.Sprintf("https://api.twitch.tv/helix/schedule?broadcaster_id=%s", channelID),
}),
"executing request",
)
}