11# -*- encoding: utf-8 -*-
22# https://dev.twitch.tv/docs/v5/reference/channels/
33
4- from twitch import keys
4+ from twitch import keys , methods
55from twitch .queries import V5Query as Qry
66from twitch .queries import query
7- from twitch .api .parameters import Boolean , BroadcastType , Direction
7+ from twitch .api .parameters import Boolean , BroadcastType , Cursor , Direction , Duration , Language , VideoSort
88
99
1010@query
11- def by_id (channel_id ):
12- q = Qry ('channels/{id}' )
13- q .add_urlkw (keys .ID , channel_id )
11+ def get_channel ():
12+ q = Qry ('channels' )
1413 return q
1514
1615
1716@query
18- def channel ():
19- raise NotImplementedError
20-
21-
22- @query
23- def editors (name ):
24- raise NotImplementedError
17+ def get_channel_by_id (channel_id ):
18+ q = Qry ('channels/{channel_id}' )
19+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
20+ return q
2521
2622
27- # TODO needs Authentication and put requests
2823@query
29- def update (name , status = None , game = None , delay = 0 ):
30- raise NotImplementedError
24+ def update_channel (channel_id , status = None , game = None , delay = None , channel_feed_enabled = None ):
25+ q = Qry ('channels/{channel_id}' , method = methods .PUT )
26+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
27+ channel = {}
28+ if status is not None :
29+ channel [keys .STATUS ] = status
30+ if game is not None :
31+ channel [keys .GAME ] = game
32+ if delay is not None :
33+ channel [keys .DELAY ] = delay
34+ if channel_feed_enabled is not None :
35+ channel [keys .CHANNEL_FEED_ENABLED ] = Boolean .validate (channel_feed_enabled )
36+ q .add_data (keys .CHANNEL , channel )
37+ return q
3138
3239
33- # TODO needs auth
3440@query
35- def delete (name ):
36- raise NotImplementedError
41+ def get_channel_editors (channel_id ):
42+ q = Qry ('channels/{channel_id}/editors' )
43+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
44+ return q
3745
3846
39- # TODO needs auth, needs POST request
4047@query
41- def commercial (name , length = 30 ):
42- raise NotImplementedError
48+ def get_channel_followers (channel_id , limit = 25 , offset = 0 , cursor = 'MA==' , direction = Direction .DESC ):
49+ q = Qry ('channels/{channel_id}/follows' )
50+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
51+ q .add_param (keys .LIMIT , limit , 25 )
52+ q .add_param (keys .OFFSET , offset , 0 )
53+ q .add_param (keys .CURSOR , Cursor .validate (cursor ), 'MA==' )
54+ q .add_param (keys .DIRECTION , direction , Direction .DESC )
55+ return q
4356
4457
4558@query
46- def teams (channel_id ):
47- q = Qry ('channels/{id }/teams' )
48- q .add_urlkw (keys .ID , channel_id )
59+ def get_channel_teams (channel_id ):
60+ q = Qry ('channels/{channel_id }/teams' )
61+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
4962 return q
5063
5164
65+ # Needs Authentication
5266@query
53- def followers (channel_id , limit = 25 , offset = 0 , direction = Direction .DESC ):
54- q = Qry ('channels/{id}/follows ' )
55- q .add_urlkw (keys .ID , channel_id )
67+ def get_channel_subscribers (channel_id , limit = 25 , offset = 0 , direction = Direction .ASC ):
68+ q = Qry ('channels/{channel_id}/subscriptions ' )
69+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
5670 q .add_param (keys .LIMIT , limit , 25 )
5771 q .add_param (keys .OFFSET , offset , 0 )
5872 q .add_param (keys .DIRECTION , direction , Direction .DESC )
@@ -61,23 +75,61 @@ def followers(channel_id, limit=25, offset=0, direction=Direction.DESC):
6175
6276# Needs Authentication
6377@query
64- def subscribers (channel_id , limit = 25 , offset = 0 , direction = Direction .ASC ):
65- raise NotImplementedError
66-
67-
68- # Needs Authentication
69- @query
70- def subscription_status (channel_id , user_id ):
71- raise NotImplementedError
78+ def check_channel_subscription (channel_id , user_id ):
79+ q = Qry ('channels/{channel_id}/subscriptions/{user_id}' )
80+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
81+ q .add_urlkw (keys .USER_ID , user_id )
82+ return q
7283
7384
7485@query
75- def videos (channel_id , limit = 10 , offset = 0 ,
76- broadcast_type = BroadcastType .HIGHLIGHT , hls = Boolean .FALSE ):
86+ def get_channel_videos (channel_id , limit = 10 , offset = 0 ,
87+ broadcast_type = BroadcastType .HIGHLIGHT ,
88+ hls = Boolean .FALSE , sort_by = VideoSort .TIME ,
89+ language = Language .ALL ):
7790 q = Qry ('channels/{id}/videos' )
7891 q .add_urlkw (keys .ID , channel_id )
7992 q .add_param (keys .LIMIT , limit , 10 )
8093 q .add_param (keys .OFFSET , offset , 0 )
8194 q .add_param (keys .BROADCAST_TYPE , BroadcastType .validate (broadcast_type ))
95+ q .add_param (keys .SORT , VideoSort .validate (sort_by ), VideoSort .TIME )
96+ q .add_param (keys .LANGUAGE , Language .validate (language ), Language .ALL )
8297 q .add_param (keys .HLS , Boolean .validate (hls ), Boolean .FALSE )
8398 return q
99+
100+
101+ @query
102+ def start_commercial (channel_id , duration = 30 ):
103+ q = Qry ('channels/{channel_id}/commercial' , method = methods .POST )
104+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
105+ q .add_data (keys .DURATION , Duration .validate (duration ))
106+ return q
107+
108+
109+ @query
110+ def reset_stream_key (channel_id ):
111+ q = Qry ('channels/{channel_id}/stream_key' , method = methods .DELETE )
112+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
113+ return q
114+
115+
116+ @query
117+ def get_channel_community (channel_id ):
118+ q = Qry ('channels/{channel_id}/community' )
119+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
120+ return q
121+
122+
123+ @query
124+ def set_channel_community (channel_id , community_id ):
125+ q = Qry ('channels/{channel_id}/community/{community_id}' , method = methods .PUT )
126+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
127+ q .add_urlkw (keys .COMMUNITY_ID , community_id )
128+ return q
129+
130+
131+ @query
132+ def delete_channel_from_community (channel_id ):
133+ q = Qry ('channels/{channel_id}/community' , method = methods .DELETE )
134+ q .add_urlkw (keys .CHANNEL_ID , channel_id )
135+ return q
0 commit comments