From 3f64d60c43f8cff8f7a4dbb7a2d6f294e34803aa Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Thu, 27 Jul 2023 12:29:54 +0200 Subject: [PATCH] [core] Add support for stream schedule to twitch lib Signed-off-by: Knut Ahlers --- pkg/twitch/schedule.go | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 pkg/twitch/schedule.go diff --git a/pkg/twitch/schedule.go b/pkg/twitch/schedule.go new file mode 100644 index 0000000..b09ff65 --- /dev/null +++ b/pkg/twitch/schedule.go @@ -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 broadcaster’s 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", + ) +}