twitch-bot/pkg/twitch/schedule.go
Knut Ahlers 3f64d60c43
[core] Add support for stream schedule to twitch lib
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2023-07-27 12:42:58 +02:00

61 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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",
)
}