Add the streamers priority system, fix #10

This commit is contained in:
gottagofaster236
2020-10-27 14:08:03 +03:00
parent 7ba45c5898
commit 793f2fdd55
3 changed files with 21 additions and 17 deletions

View File

@@ -26,7 +26,8 @@ def main():
def read_streamer_logins():
user_input = []
if len(sys.argv) <= 1: # no command-line args (the first is always source file name)
twitch_streamers = input("Enter the streamer name (or several separated by commas): ")
print("Enter the streamer name (or several separated by commas). More important streamers go first.")
twitch_streamers = input("Streamer names: ")
user_input = twitch_streamers.split(",")
else:
for i in range(1, len(sys.argv)):

View File

@@ -7,9 +7,9 @@ from exceptions import StreamerIsOfflineException, StreamerDoesNotExistException
TWITCH_CLIENT_ID = "kimne78kx3ncx6brgo4mv6wki5h1ko"
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
streamer_logins = []
_is_online = {} # streamer login -> are they online
last_offline_time = {} # the time when a streamer went offline
streamer_logins = [] # the list is sorted by priorities: more important streamers go first
online_streamers = [] # ditto
last_offline_time = {} # the time when each streamer went offline (if they did)
# specify the streamers we'll be watching
@@ -17,7 +17,6 @@ def set_streamer_logins(streamer_logins_):
global streamer_logins
streamer_logins = streamer_logins_
for streamer_login in streamer_logins:
_is_online[streamer_login] = False
check_online(streamer_login, print_offline_message=True)
@@ -39,28 +38,30 @@ def check_online(streamer_login, print_offline_message=False):
return
if not is_online(streamer_login):
_is_online[streamer_login] = True
# maintain the priorities of streamers
online_streamers.append(streamer_login)
online_streamers.sort(key=lambda streamer: streamer_logins.index(streamer))
try:
from watch_minute import update_minute_watched_event_request # circular dependencies
update_minute_watched_event_request(streamer_login)
except StreamerIsOfflineException:
if print_offline_message:
set_offline(streamer_login)
else:
_is_online[streamer_login] = False
set_offline(streamer_login, print_offline_message)
else:
print(f"{streamer_login} is live!")
def set_offline(streamer_login):
def set_offline(streamer_login, print_offline_message=True):
if is_online(streamer_login):
_is_online[streamer_login] = False
online_streamers.remove(streamer_login)
last_offline_time[streamer_login] = time.time()
print(f"{streamer_login} is offline currently.")
if print_offline_message:
print(f"{streamer_login} is offline currently.")
def is_online(streamer_login):
return _is_online[streamer_login]
return streamer_login in online_streamers
def get_user_id():

View File

@@ -24,11 +24,13 @@ minute_watched_requests = {}
def send_minute_watched_events():
headers = {"user-agent": USER_AGENT}
streamers = get_streamer_logins()
minutes_passed = 0
while True:
for streamer_login in streamers:
next_iteration = time.time() + 60 / len(streamers)
# Twitch has a limit - you can't watch more than 2 channels at one time.
# We take the first two streamers from the list as they have the highest priority.
streamers_watching = online_streamers[:2]
for streamer_login in streamers_watching:
next_iteration = time.time() + 60 / len(streamers_watching)
if is_online(streamer_login):
request_info = minute_watched_requests[streamer_login]
try: