85 lines
2.6 KiB
Go
85 lines
2.6 KiB
Go
|
package subscriptions
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"encoding/json"
|
|||
|
"net/http"
|
|||
|
"net/url"
|
|||
|
|
|||
|
"github.com/google/go-querystring/query"
|
|||
|
)
|
|||
|
|
|||
|
type CheckUserSubscriptionParams struct {
|
|||
|
// The ID of a partner or affiliate broadcaster.
|
|||
|
BroadcasterID string `url:"broadcaster_id"`
|
|||
|
|
|||
|
// The ID of the user that you’re 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 user’s subscription.
|
|||
|
Data []UserSubscription `json:"data"`
|
|||
|
}
|
|||
|
|
|||
|
type UserSubscription struct {
|
|||
|
// An ID that identifies the broadcaster.
|
|||
|
BroadcasterID string `json:"broadcaster_id"`
|
|||
|
|
|||
|
// The broadcaster’s login name.
|
|||
|
BroadcasterLogin string `json:"broadcaster_login"`
|
|||
|
|
|||
|
// The broadcaster’s 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 gifter’s login name. The object includes this field only if is_gift is true.
|
|||
|
GifterLogin *string `json:"gifter_login"`
|
|||
|
|
|||
|
// The gifter’s 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 broadcaster’s 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)
|
|||
|
endpoint := s.baseUrl.ResolveReference(&url.URL{Path: "subscriptions/user", RawQuery: v.Encode()})
|
|||
|
|
|||
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.String(), nil)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
resp, err := s.client.Do(req)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
defer resp.Body.Close()
|
|||
|
|
|||
|
var data CheckUserSubscriptionResponse
|
|||
|
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
return &data, nil
|
|||
|
}
|