go-twitch/api/subscriptions/check_user_subscription.go

90 lines
2.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 subscriptions
import (
"context"
"encoding/json"
"fmt"
"net/http"
"github.com/google/go-querystring/query"
"go.fifitido.net/twitch/api/endpoint"
)
type CheckUserSubscriptionParams struct {
// The ID of a partner or affiliate broadcaster.
BroadcasterID string `url:"broadcaster_id"`
// The ID of the user that youre checking to see whether they subscribe to the broadcaster in broadcaster_id.
// This ID must match the user ID in the access Token.
UserID string `url:"user_id"`
}
type CheckUserSubscriptionResponse struct {
// A list that contains a single object with information about the users subscription.
Data []UserSubscription `json:"data"`
}
type UserSubscription struct {
// An ID that identifies the broadcaster.
BroadcasterID string `json:"broadcaster_id"`
// The broadcasters login name.
BroadcasterLogin string `json:"broadcaster_login"`
// The broadcasters display name.
BroadcasterName string `json:"broadcaster_name"`
// The ID of the user that gifted the subscription to the user. The object includes this field only if is_gift is true.
GifterID *string `json:"gifter_id"`
// The gifters login name. The object includes this field only if is_gift is true.
GifterLogin *string `json:"gifter_login"`
// The gifters display name. The object includes this field only if is_gift is true.
GifterName *string `json:"gifter_name"`
// A Boolean value that determines whether the subscription is a gift subscription. Is true if the subscription was gifted.
IsGift bool `json:"is_gift"`
// The type of subscription. Possible values are:
//
// 1000 — Tier 1
//
// 2000 — Tier 2
//
// 3000 — Tier 3
Tier string `json:"tier"`
}
// Checks whether the user subscribes to the broadcasters channel.
//
// Requires a user access token that includes the user:read:subscriptions scope.
//
// A Twitch extensions may use an app access token if the broadcaster has granted the user:read:subscriptions scope from within the Twitch Extensions manager.
func (s *Subscriptions) CheckUserSubscription(ctx context.Context, params *CheckUserSubscriptionParams) (*CheckUserSubscriptionResponse, error) {
v, _ := query.Values(params)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.Make(s.baseUrl, "subscriptions/user", v), nil)
if err != nil {
return nil, err
}
resp, err := s.client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
statusOK := resp.StatusCode >= 200 && resp.StatusCode < 300
if !statusOK {
return nil, fmt.Errorf("failed to check user subscription (%d)", resp.StatusCode)
}
var data CheckUserSubscriptionResponse
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return nil, err
}
return &data, nil
}