mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-12-20 20:01:17 +00:00
[core] Add support for stream schedule to twitch lib
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
ebfad40b98
commit
3f64d60c43
1 changed files with 61 additions and 0 deletions
61
pkg/twitch/schedule.go
Normal file
61
pkg/twitch/schedule.go
Normal 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 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",
|
||||
)
|
||||
}
|
Loading…
Reference in a new issue