go-twitch/api/charity/get_charity_campaign.go

86 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 charity
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
"go.fifitido.net/twitch/api/endpoint"
"go.fifitido.net/twitch/api/types"
)
type GetCharityCampaignResponse struct {
// A list that contains the charity campaign that the broadcaster is currently running.
// The list is empty if the broadcaster is not running a charity campaign; the campaign information is not available after the campaign ends.
Data []CharityCampaign `json:"data"`
}
type CharityCampaign struct {
// An ID that identifies the charity campaign.
ID string `json:"id"`
// An ID that identifies the broadcaster thats running the campaign.
BroadcasterID string `json:"broadcaster_id"`
// The broadcasters login name.
BroadcasterLogin string `json:"broadcaster_login"`
// The broadcasters display name.
BroadcasterName string `json:"broadcaster_name"`
// The charitys name.
CharityName string `json:"charity_name"`
// A description of the charity.
CharityDescription string `json:"charity_description"`
// A URL to an image of the charitys logo. The images type is PNG and its size is 100px X 100px.
CharityLogo string `json:"charity_logo"`
// A URL to the charitys website.
CharityWebsite string `json:"charity_website"`
// The current amount of donations that the campaign has received.
CurrentAmount types.CurrencyAmount `json:"current_amount"`
// The campaigns fundraising goal. This field is null if the broadcaster has not defined a fundraising goal.
TargetAmount *types.CurrencyAmount `json:"target_amount"`
}
// Gets information about the charity campaign that a broadcaster is running.
// For example, the campaigns fundraising goal and the current amount of donations.
//
// To receive events when progress is made towards the campaigns goal or the broadcaster changes the fundraising goal,
// subscribe to the channel.charity_campaign.progress subscription type.
//
// Requires a user access token that includes the channel:read:charity scope.
func (c *Charity) GetCharityCampaign(ctx context.Context, broadcasterID string) (*GetCharityCampaignResponse, error) {
v := url.Values{"broadcaster_id": {broadcasterID}}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.Make(c.baseUrl, "charity/campaigns", v), nil)
if err != nil {
return nil, err
}
res, err := c.client.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
statusOK := res.StatusCode >= 200 && res.StatusCode < 300
if !statusOK {
return nil, fmt.Errorf("failed to get charity campaign (%d)", res.StatusCode)
}
var data GetCharityCampaignResponse
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
return nil, err
}
return &data, nil
}