-
Notifications
You must be signed in to change notification settings - Fork 4
/
channel.go
143 lines (120 loc) · 4.81 KB
/
channel.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package twitch
import (
"fmt"
"time"
)
type Channel struct {
Mature bool `json:"mature"`
Status string `json:"status"`
BroadcasterLanguage string `json:"broadcaster_language"`
BroadcasterType string `json:"broadcaster_type"`
DisplayName string `json:"display_name"`
Game string `json:"game"`
Delay int64 `json:"delay"`
Language string `json:"language"`
Id int64 `json:"_id"`
Name string `json:"name"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Logo string `json:"logo"`
Banner string `json:"banner"`
VideoBanner string `json:"video_banner"`
ProfileBanner string `json:"profile_banner"`
ProfileBannerBackgroundColor string `json:"profile_banner_background_color"`
Partner bool `json:"partner"`
Views int64 `json:"views"`
Followers int64 `json:"followers"`
}
// GetChannel requests channel information from Twitch.
// It returns a Channel struct if successful and any error encountered.
func (client *TwitchClient) GetChannel(channel string) (*Channel, error) {
res := Channel{}
err := client.getRequest(fmt.Sprintf("/channels/%s", channel), nil, &res)
if err != nil {
return nil, err
}
return &res, nil
}
// Versioned Channel Responses
// ===========================
type CommonChannelFields struct {
Mature bool `json:"mature"`
Status string `json:"status"`
BroadcasterLanguage string `json:"broadcaster_language"`
BroadcasterType string `json:"broadcaster_type"`
DisplayName string `json:"display_name"`
Game string `json:"game"`
Delay int64 `json:"delay"`
Language string `json:"language"`
Id int64 `json:"_id"`
Name string `json:"name"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Logo string `json:"logo"`
Banner string `json:"banner"`
VideoBanner string `json:"video_banner"`
ProfileBanner string `json:"profile_banner"`
ProfileBannerBackgroundColor string `json:"profile_banner_background_color"`
Partner bool `json:"partner"`
Views int64 `json:"views"`
Followers int64 `json:"followers"`
}
type TwitchChannel interface {
// GetBroadcasterType can be one of [partner|affiliate|'']
GetBroadcasterType() string
// GetProfileBanner returns the URL of the channel's profile banner, if set
GetProfileBanner() string
}
// Twtich API Channel v3 response
// ------------------------------
type v3Channel struct {
CommonChannelFields
Id int64 `json:"_id"`
}
// GetBroadcasterType returns 'partner' if the API response has the `Partner`
// field set, 'unknown' otherwise since we cannot distinguish between
// affiliates and regular streamers.
func (c *v3Channel) GetBroadcasterType() string {
if c.Partner {
return "partner"
}
return "unknown"
}
// Twtich API Channel v5 response
// ------------------------------
type v5Channel struct {
Channel
Id string `json:"_id"`
BroadcasterType string `json:"broadcaster_type"`
}
// GetBroadcasterType returns the API `broadcaster_type` response.
func (c *v5Channel) GetBroadcasterType() string {
return c.BroadcasterType
}
func (c *v5Channel) GetProfileBanner() string {
return c.ProfileBanner
}
// Versioned API Functions
// -----------------------
// GetChannelForName requests channel information for the given channel name.
// It returns a v3Channel struct if successful and any error encountered.
func (client *TwitchClient) GetChannelForName(channelName string) (TwitchChannel, error) {
res := v5Channel{}
options := &RequestOptions{Version: "3"}
err := client.getRequest(fmt.Sprintf("/channels/%s", channelName), options, &res)
if err != nil {
return nil, err
}
return &res, nil
}
// GetChannelForId requests channel information for the given channel ID.
// It returns a Channel struct if successful and any error encountered.
func (client *TwitchClient) GetChannelForId(channelId int64) (TwitchChannel, error) {
res := v5Channel{}
options := &RequestOptions{Version: "5"}
err := client.getRequest(fmt.Sprintf("/channels/%d", channelId), options, &res)
if err != nil {
return nil, err
}
return &res, nil
}