Changelog#
Version 4.3.1#
Twitch#
image
ofCustomReward
is now parsed correctly
Version 4.3.0#
Twitch#
Added the following new Endpoints:
“Get User Emotes”
get_user_emotes()
“Warn Chat User”
warn_chat_user()
“Create EventSub Subscription”
create_eventsub_subscription()
Fixed Error handling of Endpoint
create_clip()
Fixed not raising UnauthorizedException when auth token is invalid and auto_refresh_auth is False
Added Parameter
is_paused
toupdate_custom_reward()
(thanks iProdigy )Remove deprecated field “tags_ids” from
SearchChannelResult
EventSub#
Added the following new Topics:
“Channel Chat Settings Update”
listen_channel_chat_settings_update()
“User Whisper Message”
listen_user_whisper_message()
“Channel Points Automatic Reward Redemption”
listen_channel_points_automatic_reward_redemption_add()
“Channel VIP Add”
listen_channel_vip_add()
“Channel VIP Remove”
listen_channel_vip_remove()
“Channel Unban Request Create”
listen_channel_unban_request_create()
“Channel Unban Request Resolve”
listen_channel_unban_request_resolve()
“Channel Suspicious User Message”
listen_channel_suspicious_user_message()
“Channel Suspicious User Update”
listen_channel_suspicious_user_update()
“Channel Moderate”
listen_channel_moderate()
“Channel Warning Acknowledgement”
listen_channel_warning_acknowledge()
“Channel Warning Send”
listen_channel_warning_send()
“Automod Message Hold”
listen_automod_message_hold()
“Automod Message Update”
listen_automod_message_update()
“Automod Settings Update”
listen_automod_settings_update()
“Automod Terms Update”
listen_automod_terms_update()
“Channel Chat User Message Hold”
listen_channel_chat_user_message_hold()
“Channel Chat User Message Update”
listen_channel_chat_user_message_update()
Fixed reconnect logic for Websockets (thanks Latent-Logic )
Fixed logger names being set incorrectly for EventSub transports
Fixed field “ended_at being incorrectly named “ends_at” for
ChannelPollEndData
Chat#
OAuth#
Added CodeFlow user authenticator, usefull for headless server user token generation.
CodeFlow
Added the following new Auth Scopes:
Version 4.2.1#
EventSub#
Fixed event payload parsing for Channel Prediction events
Version 4.2.0#
Twitch#
Fixed Endpoint
get_stream_key()
(thanks moralrecordings )Added the following new Endpoints:
“Get Ad Schedule”
get_ad_schedule()
“Snooze Next Ad”
snooze_next_ad()
“Send Chat Message”
send_chat_message()
“Get Moderated Channels”
get_moderated_channels()
EventSub#
Fixed
stop()
not raising RuntimeException when called and socket not running.Added the following new Topics:
“Channel Ad Break Begin”
listen_channel_ad_break_begin()
“Channel Chat Message”
listen_channel_chat_message()
OAuth#
Added the following new AuthScopes:
Version 4.1.0#
Twitch#
Removed the deprecated Endpoint “Get Users Follows”
Removed the deprecated bits related fields from Poll Endpoint data
EventSub#
Duplicate Webhook messages will now be ignored
EventSub will now recover properly from a disconnect when auth token is expired
Added the following new Topics:
“Channel Chat Clear”
listen_channel_chat_clear()
“Channel Chat Clear User Messages”
listen_channel_chat_clear_user_messages()
“Channel Chat Message Delete”
listen_channel_chat_message_delete()
“Channel Chat Notification”
listen_channel_chat_notification()
Removed the deprecated version 1 of topic “Channel Follow”
Chat#
Improved recovery from broken network connection (thanks Latent-Logic )
Added
is_me
flag toChatMessage
Fixed parsing of messages using the
/me
chat command
OAuth#
Added the following new AuthScopes:
Version 4.0.1#
Chat#
Fixed RuntimeWarning when handling chat commands
Version 4.0.0#
Note
This Version introduces a lot of breaking changes. Please see the v3 to v4 migration guide to learn how to migrate.
Keystone Features#
EventSub now supports the newly added Websocket transport
EventSub is now using TwitchObject based callback payloads instead of raw dictionaries
Chat now supports Command Middleware, check out Chat - Introduction to Middleware for more info
Added
UserAuthenticationStorageHelper
to cut down on common boilerplate code, check out Reuse user tokens with UserAuthenticationStorageHelper for more info
Twitch#
Added new fields
is_branded_content
andcontent_classification_labels
to response ofget_channel_information()
Added new parameters
is_branded_content
andcontent_classification_labels
tomodify_channel_information()
Added new Endpoint “Get Content Classification Labels”
get_content_classification_labels()
Removed the following deprecated Endpoints:
“Get Soundstrack Current Track”
“Get SoundTrack Playlist”
“Get Soundtrack Playlists”
get_polls()
now allows up to 20 poll IDsget_channel_followers()
can now also be used without the required Scope or just with App AuthenticationAdded new parameter
is_featured
toget_clips()
and addedis_featured
to result.
EventSub#
Moved old EventSub from
twitchAPI.eventsub
to new packagetwitchAPI.eventsub.webhook
and renamed it toEventSubWebhook
Added new EventSub Websocket transport
EventSubWebsocket
All EventSub callbacks now use
TwitchObject
based Payloads instead of raw dictionaries. See Available Topics and Callback Payloads for a list of all available PayloadsAdded option for
EventSubWebhook
to specify a asyncio loop viacallback_loop
in which to run all callbacks inAdded option for
EventSubWebsocket
to specify a asyncio loop viacallback_loop
in which to run all callbacks inAdded automatical removal of tailing
/
incallback_url
if presentFixed broken handling of malformed HTTP requests made to the callback endport of
EventSubWebhook
Made
EventSubWebhook
more easily mockable viatwitch-cli
by addingsubscription_url
Added optional subscription revokation handler via
revocation_handler
toEventSubWebhook
PubSub#
Handle Authorization Revoked messages (Thanks Braastos )
Added option to specify a asyncio loop via
callback_loop
in which to run all callbacks in
Chat#
Added Chat Command Middleware, a way to decide if a command should run, see Chat - Introduction to Middleware for more info.
Added the following default Chat Command Middleware:
Added option to specify a asyncio loop via
callback_loop
in which to run all callbacks inFixed errors raised in callbacks not being properly reported
Added Hype Chat related fields to
ChatMessage
Improved logging
Fixed KeyError when encountering some Notice events
Added new reply tags
reply_thread_parent_msg_id
andreply_thread_parent_user_login
toChatMessage
Reconnects no longer duplicate the channel join list
twitchAPI.chat.Chat.start()
now thows an error should Chat() not have been awaited
OAuth#
Added
UserAuthenticationStorageHelper
, a easy plug and play way to generate user auth tokens only on demandMade it possible to mock all auth flows with
twitch-cli
Other#
Added
current_cursor()
toAsyncIterTwitchObject
Renamed module
twitchAPI.types
totwitchAPI.type
Moved all API related TwitchObjects from module
twitchAPI.object
totwitchAPI.object.api
Removed default imports from module
twitchAPI
Version 3.11.0#
Twitch#
Added missing field emote_mode to response of
get_chat_settings()
andupdate_chat_settings()
(Teekeks/pyTwitchAPI#234)
Chat#
Fixed timing based AttributeError: ‘NoneType’ object has no attribute ‘get’ in NoticeEvent during reconnect
Ensured that only Chat Messages will ever be parsed as chat commands
Added functionality to set per channel based prefixes (Teekeks/pyTwitchAPI#229):
set_channel_prefix()
to set a custom prefix for the given channel(s)reset_channel_prefix()
to remove a custom set prefix for the given channel(s)
Version 3.10.0#
Twitch#
Added new
ChatBadgeVersion
related fields to the following Endpoints: (Thanks stolenvw )set_user_authentication()
now tries to refresh the given token set if it seems to be out of dateremoved the following deprecated endpoints:
“Replace Stream Tags”
“Get Stream Tags”
“Get All Stream Tags”
“Redeem Code”
“Get Code Status”
Fixed condition logic when parameter first was given for the following Endpoints:
get_chatters()
(Thanks d7415 )get_soundtrack_playlist()
get_soundtrack_playlists()
PubSub#
PubSub now cleanly reestablishes the connection when the websocket was unexpectedly closed
Version 3.9.0#
Twitch#
Added the following new Endpoints:
“Get Channel Followers”
get_channel_followers()
“Get Followed Channels”
get_followed_channels()
Fixed TypeError: __api_get_request() got an unexpected keyword argument ‘body’ (Thanks JC-Chung )
EventSub#
Added new Topic
listen_channel_follow_v2()
Chat#
Bot is now correctly reconnecting and rejoining channels after losing connection
added
is_subscriber()
(Thanks stolenvw )added new Event
NOTICE
- Triggered when server sends a notice message (Thanks stolenvw )
Version 3.8.0#
Twitch#
Added the new Endpoint “Send a Shoutout”
send_a_shoutout()
get_users_follows()
is now marked as deprecatedAdded missing parameter
type
toget_streams()
Helper#
Added new Async Generator helper
limit()
, with this you can limit the amount of results returned from the given AsyncGenerator to a maximum number
EventSub#
Added the following new Topics:
“Channel Shoutout Create”
listen_channel_shoutout_create()
“Channel Shoutout Receive”
listen_channel_shoutout_receive()
PubSub#
Added new Topic “Low trust Users”
listen_low_trust_users()
Chat#
Improved rate limit handling of
join_room()
when joining multiple rooms per callThe following functions now all ignore the capitalization of the given chat room:
Added
initial_channel
to__init__()
, with this you can auto join channels on bot startupAdded
is_in_room()
Added
log_no_registered_command_handler
, with this you can control if the “no registered handler for event” warnings should be logged or not
OAuth#
Added the following new AuthScopes:
MODERATOR_MANAGE_SHOUTOUTS
MODERATOR_READ_SHOUTOUTS
MODERATOR_READ_FOLLOWERS
Improved async handling of
UserAuthenticator
Version 3.7.0#
Twitch#
Added the following Endpoints:
“Get AutoMod Settings”
get_automod_settings()
“Update AutoMod Settings”
update_automod_settings()
Added
session_timeout
config. With this you can optionally change the timeout behavior across the entire library
OAuth#
Added the following new AuthScopes:
MODERATOR_READ_AUTOMOD_SETTINGS
MODERATOR_MANAGE_AUTOMOD_SETTINGS
Version 3.6.2#
Added
py.typed
file to comply with PEP-561
Twitch#
Fixed all Endpoints that use
AsyncIterTwitchObject
yielding some items multiple timesadded missing field
to_login
toget_users_follows()
Version 3.6.1#
EventSub#
start()
now waits till the internal web server has fully started up
Chat#
Version 3.5.2#
Twitch#
Fixed
end_prediction()
calling NoneType
Version 3.5.1#
Chat#
Fixed KeyError in clear chat event
Version 3.5.0#
Twitch#
Added the following new Endpoints:
“Get Charity Campaign”
get_charity_campaign()
“Get Charity Donations”
get_charity_donations()
Fixed bug that made the user refresh token invalid in some rare edge cases
EventSub#
Added the following new Topics:
“Charity Campaign Start”
listen_channel_charity_campaign_start()
“Charity Campaign Stop”
listen_channel_charity_campaign_stop()
“Charity Campaign Progress”
listen_channel_charity_campaign_progress()
“Charity Campaign Donate”
listen_channel_charity_campaign_donate()
PubSub#
Added
is_connected()
Fixed bug that prevented a clean shutdown on Linux
Chat#
Added automatic rate limit handling to channel joining and message sending
send_message()
now waits till reconnected when Chat got disconnectedsend_raw_irc_message()
now waits till reconnected when Chat got disconnectedAdded
is_connected()
Added
is_ready()
Chat now cleanly handles reconnect requests
OAuth#
Added new Auth Scope
CHANNEL_READ_CHARITY
Fixed bug that prevented a clean shutdown on Linux
Version 3.4.1#
fixed bug that prevented newer pip versions from gathering the dependencies
Version 3.4.0#
Twitch#
Added the following new Endpoints:
“Update Shield Mode Status”
update_shield_mode_status()
“Get Shield Mode Status”
get_shield_mode_status()
Added the new
tags
Field to the following Endpoints:“Get Streams”
get_streams()
“Get Followed Streams”
get_followed_streams()
“Search Channels”
search_channels()
“Get Channel Information”
get_channel_information()
“Modify Channel Information”
modify_channel_information()
Improved documentation
EventSub#
Added the following new Topics:
“Shield Mode End”
listen_channel_shield_mode_end()
“Shield Mode Begin”
listen_channel_shield_mode_begin()
Improved type hints of
listen_
functionsAdded check if given callback is a coroutine to
listen_
functions
PubSub#
Fixed AttributeError when reconnecting
Chat#
Expanded documentation on Events and Commands
Fixed room cache being randomly destroyed over time
Improved message handling performance drastically for high volume chat bots
Fixed AttributeError when reconnecting
join_room()
now times out when it was unable to join a room instead of being infinitly stuckjoin_room()
now returns a list of channels it was unable to joinAdded
join_timeout
Added
unregister_command()
Added
unregister_event()
Added the following new Events:
USER_LEFT
- Triggered when a user leaves a chat channelCHAT_CLEARED
- Triggered when a user was timed out, banned or the messages where deletedWHISPER
- Triggered when a user sends a whisper message to the bot
OAuth#
fixed
authenticate()
getting stuck whenuser_token
is provided (thanks Tempystral )
Version 3.3.0#
Added new event to Chat:
MESSAGE_DELETE
which triggers whenever a single message got deleted in a channelAdded
send_raw_irc_message()
method for sending raw irc commands to the websocket. Use with care!Fixed missing state cleanup after closing Chat, preventing the same instance from being started again
fixed
room_id
always being Null
Version 3.2.2#
Fixed return type of
get_broadcaster_subscriptions()
removed any field starting with underscore from
to_dict()
Version 3.2.1#
Fixed bug that resulted in a timeout when reading big API requests
Optimized the use of Sessions, slight to decent performance optimization for API requests, especially for async generators
Version 3.2.0#
Made the used loggers available for easy logging configuration
added the option to set the chat command prefix via
set_prefix()
set_user_authentication()
now also throws aMissingScopeException
when no scope is given. (thanks aw-was-here )
Version 3.1.1#
Added the Endpoint “Get Chatters”
get_chatters()
Added the
MODERATOR_READ_CHATTERS
AuthScopeAdded missing
total
field toget_users_follows()
added
send()
shorthand to ChatCommand, this makes sending command replies easier.Fixed issue which prevented the Twitch client being used inside a EventSub, PubSub or Chat callback
Fixed issue with using the wrong API url in
create_custom_reward()
twitchAPI.helper.first()
now returns None when there is no data to return instead of raising StopAsyncIteration exceptionExceptions in Chat callback methods are now properly displayed
Version 3.0.1#
Fixed bug which resulted in
Timeout context manager should be used inside a task
when subscribing to more than one EventSub topic
Version 3.0.0#
Note
This Version is a major rework of the library. Please see the v2 to v3 migration guide to learn how to migrate.
Highlights
Library is now fully async
Twitch API responses are now Objects and Generators instead of pure dictionaries
Automatic Pagination of API results
First alpha of a Chat Bot implementation
More customizability for the UserAuthenticator
A lot of new Endpoints where added
New look and content for the documentation
Full Changelog
Rewrote the twitchAPI to be async
twitchAPI now uses Objects instead of dictionaries
added automatic pagination to all relevant API endpoints
PubSub now uses async callbacks
EventSub subscribing and unsubscribing is now async
Added a alpha version of a Twitch Chat Bot implementation
switched AuthScope CHANNEL_MANAGE_CHAT_SETTINGS to MODERATOR_MANAGE_CHAT_SETTINGS
Added the following AuthScopes:
MODERATOR_MANAGE_ANNOUNCEMENTS
MODERATOR_MANAGE_CHAT_MESSAGES
USER_MANAGE_CHAT_COLOR
CHANNEL_MANAGE_MODERATORS
CHANNEL_READ_VIPS
CHANNEL_MANAGE_VIPS
USER_MANAGE_WHISPERS
added
first()
helper functionAdded the following new Endpoints:
“Send Whisper”
send_whisper()
“Remove Channel VIP”
remove_channel_vip()
“Add Channel VIP”
add_channel_vip()
“Get VIPs”
get_vips()
“Add Channel Moderator”
add_channel_moderator()
“Remove Channel Moderator”
remove_channel_moderator()
“Get User Chat Color”
get_user_chat_color()
“Update User Chat Color”
update_user_chat_color()
“Delete Chat Message”
delete_chat_message()
“Send Chat Announcement”
send_chat_announcement()
“Get Soundtrack Current Track”
get_soundtrack_current_track()
“Get Soundtrack Playlist”
get_soundtrack_playlist()
“Get Soundtrack Playlists”
get_soundtrack_playlists()
Removed the folllowing deprecated Endpoints:
“Get Banned Event”
“Get Moderator Events”
“Get Webhook Subscriptions”
The following Endpoints got changed:
Added igdb_id search parameter to
get_games()
Removed the Voting related fields in
create_poll()
due to being deprecatedUpdated the logic in
update_custom_reward()
to avoid API errorsRemoved id parameter from
get_hype_train_events()
Fixed the range check in
get_channel_information()
app_auth_refresh_callback
anduser_auth_refresh_callback
are now asyncAdded
get_user_info()
UserAuthenticator:
You can now set the document that will be shown at the end of the Auth flow by setting
document
The optional callback is now called with the access and refresh token instead of the user token
Added browser controls to
authenticate()
removed
requests
andwebsockets
libraries from the requirements (resulting in smaller library footprint)
Version 2.5.7#
Fixed the End Poll Endpoint
Properly define terminated poll status (thanks @iProdigy!)
Version 2.5.6#
Updated Create Prediction to take between 2 and 10 outcomes (thanks @lynara!)
Added “Get Creator Goals” Endpoint (thanks @gitagogaming!)
TwitchAPIException will now also include the message from the Twitch API when available
Version 2.5.5#
Added datetime parsing to created_at field for Ban User and Get Banned Users endpoints
fixed title length check failing if the title is None for Modify Channel Information endpoint (thanks @Meduris!)
Version 2.5.4#
Added the following new endpoints:
“Ban User”
“Unban User”
“Get Blocked Terms”
“Add Blocked Term”
“Remove Blocked Term”
Added the following Auth Scopes:
moderator:manage:banned_users
moderator:read:blocked_terms
moderator:manage:blocked_terms
Added additional debug logging to PubSub
Fixed KeyError when being rate limited
Version 2.5.3#
Twitch.get_channel_info now also optionally accepts a list of strings with up to 100 entries for the broadcaster_id parameter
Version 2.5.2#
Added the following new endpoints:
“Get Chat Settings”
“Update Chat Settings”
Added Auth Scope “channel:manage:chat_settings”
Fixed error in Auth Scope “channel:manage:schedule”
Fixed error in Endpoint “Get Extension Transactions”
Removed unusable Webhook code
Version 2.5.1#
Fixed bug that prevented EventSub subscriptions to work if main threads asyncio loop was already running
Version 2.5.0#
EventSub and PubSub callbacks are now executed non blocking, this fixes that long running callbacks stop the library to respond to heartbeats etc.
EventSub subscription can now throw a TwitchBackendException when the API returns a Error 500
added the following EventSub topics (thanks d7415!)
“Goal Begin”
“Goal Progress”
“Goal End”
Version 2.4.2#
Fixed EventSub not keeping local state in sync on unsubscribe
Added proper exception if authentication via oauth fails
Version 2.4.1#
EventSub now uses a random 20 letter secret by default
EventSub now verifies the send signature
Version 2.4.0#
Implemented EventSub
Marked Webhook as deprecated
added the following new endpoints
“Get Followed Streams”
“Get Polls”
“End Poll”
“Get Predictions”
“Create Prediction”
“End Prediction”
“Manage held AutoMod Messages”
“Get Channel Badges”
“Get Global Chat Badges”
“Get Channel Emotes”
“Get Global Emotes”
“Get Emote Sets”
“Delete EventSub Subscription”
“Get Channel Stream Schedule”
“Get Channel iCalendar”
“Update Channel Stream Schedule”
“Create Channel Stream Schedule Segment”
“Update Channel Stream Schedule Segment”
“Delete Channel Stream Schedule Segment”
“Update Drops Entitlements”
Added the following new AuthScopes
USER_READ_FOLLOWS
CHANNEL_READ_POLLS
CHANNEL_MANAGE_POLLS
CHANNEL_READ_PREDICTIONS
CHANNEL_MANAGE_PREDICTIONS
MODERATOR_MANAGE_AUTOMOD
CHANNEL_MANAGE_SCHEDULE
removed deprecated Endpoints
“Create User Follows”
“Delete User Follows”
Added Topics to PubSub
“AutoMod Queue”
“User Moderation Notifications”
Check if at least one of status or id is provided in get_custom_reward_redemption
reverted change that made reward_id optional in get_custom_reward_redemption
get_extension_transactions now takes up to 100 transaction ids
added delay parameter to modify_channel_information
made parameter prompt of create_custom_reward optional and changed parameter order
made reward_id of get_custom_reward take either a list of str or str
made parameter title, prompt and cost optional in update_custom_reward
made parameter redemption_ids of update_redemption_status take either a list of str or str
fixed exception in block_user
allowed Twitch.check_automod_status to take in more that one entry
Version 2.3.2#
fixed get_custom_reward_redemption url (thanks iProdigy!)
made reward_id parameter of get_custom_reward_redemption optional
Version 2.3.1#
fixed id parameter for get_clips of Twitch
Version 2.3.0#
Initializing the Twitch API now automatically creates a app authorization (can be disabled via flag)
Made it possible to not set a app secret in cases where only user authentication is required
added helper function validate_token to OAuth
added helper function revoke_token to OAuth
User OAuth Token is now automatically validated for correct scope and validity when being set
added new “Get Drops Entitlement” endpoint
added new “Get Teams” endpoint
added new “Get Chattel teams” endpoint
added new AuthScope USER_READ_SUBSCRIPTIONS
fixed exception in Webhook if no Authentication is set and also not required
refactored Authentication handling, making it more versatile
added more debugging logs
improved documentation
Version 2.2.5#
added optional callback to Twitch for user and app access token refresh
added additional check for non empty title in Twitch.modify_channel_information
changed required scope of PubSub.listen_channel_subscriptions from CHANNEL_SUBSCRIPTIONS to CHANNEL_READ_SUBSCRIPTIONS
Version 2.2.4#
added Python 3.9 compatibility
improved example for PubSub
Version 2.2.3#
added new “get channel editors” endpoint
added new “delete videos” endpoint
added new “get user block list” endpoint
added new “block user” endpoint
added new “unblock user” endpoint
added new authentication scopes
some refactoring
Version 2.2.2#
added missing API base url to delete_custom_reward, get_custom_reward, get_custom_reward_redemption and update_redemption_status (thanks asphaltschneider!)
Version 2.2.1#
added option to set a ssl context to be used by Webhook
fixed modify_channel_information throwing ValueError (thanks asishm!)
added default route to Webhook on / for easier debugging
properly check for empty lists in the selection of the used AuthScope in get_users
raise ValueError if both from_id and to_id are None in subscribe_user_follow of Webhook
Version 2.2.0#
added missing “Create custom rewards” endpoint
added missing “Delete Custom rewards” endpoint
added missing “Get Custom Reward” endpoint
added missing “Get custom reward redemption” endpoint
added missing “Update custom Reward” endpoint
added missing “Update redemption status” endpoint
added missing pagination parameters to endpoints that support them
improved documentation
properly handle 401 response after retries
Version 2.1#
Added a Twitch PubSub client implementation.
See PubSub for more Info!
added PubSub client
made UserAuthenticator URL dynamic
added named loggers for all modules
fixed bug in Webhook.subscribe_subscription_events
added Twitch.get_user_auth_scope
Version 2.0.1#
Fixed some bugs and implemented changes made to the Twitch API
Version 2.0#
This version is a major overhaul of the Webhook, implementing missing and changed API endpoints and adding a bunch of quality of life changes.
Reworked the entire Documentation
Webhook subscribe and unsubscribe now waits for handshake to finish
Webhook now refreshes its subscriptions
Webhook unsubscribe is now a single function
Webhook auto unsubscribes from topics on stop()
Added unsubscribe_all function to Webhook
Twitch instance now auto renews auth token once they become invalid
Added retry on API backend error
Added get_drops_entitlements endpoint
Fixed function signature of get_webhook_subscriptions
Fixed update_user_extension not writing data
get_user_active_extensions now requires User Authentication
get_user_follows now requires at elast App Authentication
get_users now follows the changed API Authentication logic
get_stream_markers now also checks that at least one of user_id or video_id is provided
get_streams now takes a list for game_id
get_streams now checks the length of the language list
get_moderator_events now takes in a list of user_ids
get_moderators now takes in a list of user_ids
get_clips can now use the first parameter
Raise exception when twitch backend returns 503 even after a retry
Now use custom exception classes
Removed depraced endpoint get_streams_metadata