twitch-bot/pkg/twitch/schedule.go
Knut Ahlers 9ebdaa8a71
[templating] Add scheduleSegments function
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2023-11-05 13:44:16 +01:00

64 lines
1.8 KiB
Go
Raw 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 []ChannelStreamScheduleSegment `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"`
}
ChannelStreamScheduleSegment 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"`
}
)
// 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",
)
}