forked from dymik739/modular-bot-framework-for-telegram
		
	auto-schedule-pro: add the ability to read dynamic links from containers [experimental feature]
This commit is contained in:
		
							parent
							
								
									2f004fec7d
								
							
						
					
					
						commit
						b3a44bcc0c
					
				@ -14,11 +14,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"},
 | 
					        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"},
 | 
				
			||||||
        "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
					        "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
 | 
				
			||||||
        "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
 | 
					        "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
					        "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
 | 
				
			||||||
        "12:20": {"name": "Дискретна математика", "teacher": "Пономаренко А. М.", "link": "https://us05web.zoom.us/j/7089075754?pwd=TWRlZmxyVlFiTWU1UGlVVU1XcFE0Zz09"},
 | 
					        "12:20": {"name": "Дискретна математика", "teacher": "Пономаренко А. М.", "link": "https://us05web.zoom.us/j/7089075754?pwd=TWRlZmxyVlFiTWU1UGlVVU1XcFE0Zz09"},
 | 
				
			||||||
        "14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"}
 | 
					        "14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"}
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -40,11 +40,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"},
 | 
					        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"},
 | 
				
			||||||
        "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
					        "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
 | 
				
			||||||
        "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
 | 
					        "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
					        "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
 | 
				
			||||||
        "12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Кушлаба М. П.", "link": "https://bbb.comsys.kpi.ua/b/myk-0iw-red-p01"},
 | 
					        "12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Кушлаба М. П.", "link": "https://bbb.comsys.kpi.ua/b/myk-0iw-red-p01"},
 | 
				
			||||||
        "14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"}
 | 
					        "14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"}
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
current_time = datetime.datetime.now()
 | 
					current_time = datetime.datetime.now()
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -48,14 +49,15 @@ for i in key_list:
 | 
				
			|||||||
if next_pair_time == None:
 | 
					if next_pair_time == None:
 | 
				
			||||||
    if len(full_schedule.keys()) > 0:
 | 
					    if len(full_schedule.keys()) > 0:
 | 
				
			||||||
        #print("test3.1")
 | 
					        #print("test3.1")
 | 
				
			||||||
        actual_pair_ts = reference_time + min(full_schedule.keys())
 | 
					
 | 
				
			||||||
        dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
 | 
					        #actual_pair_ts = reference_time + min(full_schedule.keys())
 | 
				
			||||||
        dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400)
 | 
					        #dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
 | 
				
			||||||
 | 
					        #dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400)
 | 
				
			||||||
        p = full_schedule[min(full_schedule.keys())]
 | 
					        p = full_schedule[min(full_schedule.keys())]
 | 
				
			||||||
        #print("test3.1.1")
 | 
					        #print("test3.1.1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #print("{} == 6 && {} == 1, {}".format(current_day, dt_pair.strftime('%u'), str( ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")) )))
 | 
					        #print("{} == 6 && {} == 1, {}".format(current_day, dt_pair.strftime('%u'), str( ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")) )))
 | 
				
			||||||
 | 
					        '''
 | 
				
			||||||
        human_readable_date = ""
 | 
					        human_readable_date = ""
 | 
				
			||||||
        if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
 | 
					        if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
 | 
				
			||||||
            human_readable_date += "завтра "
 | 
					            human_readable_date += "завтра "
 | 
				
			||||||
@ -76,16 +78,42 @@ if next_pair_time == None:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        human_readable_date += " до "
 | 
					        human_readable_date += " до "
 | 
				
			||||||
        human_readable_date += dt_pair_finish.strftime("%H:%M")
 | 
					        human_readable_date += dt_pair_finish.strftime("%H:%M")
 | 
				
			||||||
 | 
					        '''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
 | 
					        #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
 | 
				
			||||||
        #print("test3.1.5")
 | 
					        #print("test3.1.5")
 | 
				
			||||||
 | 
					        if 'container_id' in p:
 | 
				
			||||||
        print(f"Location: {p['link'].split()[0]}\n\n")
 | 
					            try:
 | 
				
			||||||
 | 
					                cont = json.decode(open(f"../containers/{p['container_id']}", 'r').read())
 | 
				
			||||||
 | 
					                if (time.time() - cont['update_ts']) > 43200:
 | 
				
			||||||
 | 
					                    if ("QUERY_STRING" in os.environ) and ("force" in os.environ['QUERY_STRING'].lower()):
 | 
				
			||||||
 | 
					                        print(f"Location: {cont['link']}\n\n", end = '')
 | 
				
			||||||
                    else:
 | 
					                    else:
 | 
				
			||||||
        self.RESPONCE = "Пар немає взагалі. Ми вільні!"
 | 
					                        import random
 | 
				
			||||||
 | 
					                        new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
 | 
				
			||||||
 | 
					                        random.seed(new_seed)
 | 
				
			||||||
 | 
					                        surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
 | 
				
			||||||
 | 
					                        print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Посилання на пару {p['name']}, яке зберігається у сховищі, було отримане більш ніж 12 годин тому (рівно {time.time() - cont['update_ts']} секунд тому), тому, скоріш за все, не є дійсним.</p><p>На жаль, нового посилання ще не надходило, тому Ви можете або чекати на нього і оновлювати цю сторінку (перенаправлення станеться, щойно з'явиться нове посилання), або перейти вручну за старим посиланням (не рекомендується):</p><a href=\"{cont['link']}\">{cont['link']}</a><br><p>PS: щоб обійти цю сторінку та завжди автоматично переходити за будь-яким наявним посиланням, можна додати у рядок URL в кінці напис: ?force</p>")
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    print(f"Location: {cont['link']}\n\n", end = '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            except Exception as e:
 | 
				
			||||||
 | 
					                import random
 | 
				
			||||||
 | 
					                new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
 | 
				
			||||||
 | 
					                random.seed(new_seed)
 | 
				
			||||||
 | 
					                surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
 | 
				
			||||||
 | 
					                print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Під час спроби отримання посилання на пару {p['name']} сталася непередбачена помилка. Ви можете оновлювати сторінку, поки проблема не зникне (перенаправлення відбудеться, щойно все запрацює), або пошукати посилання де-інде.</p><p>Вибачте за тимчасові незручності(</p>")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            print(f"Location: {p['link'].split()[0]}\n\n", end = '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        #self.RESPONCE = "Пар немає взагалі. Ми вільні!"
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    #print("test3.2")
 | 
					    #print("test3.2")
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
    actual_pair_ts = reference_time + next_pair_time
 | 
					    actual_pair_ts = reference_time + next_pair_time
 | 
				
			||||||
    dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
 | 
					    dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
 | 
				
			||||||
    dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400)
 | 
					    dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400)
 | 
				
			||||||
@ -105,7 +133,33 @@ else:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    human_readable_date += " до "
 | 
					    human_readable_date += " до "
 | 
				
			||||||
    human_readable_date += dt_pair_finish.strftime("%H:%M")
 | 
					    human_readable_date += dt_pair_finish.strftime("%H:%M")
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
 | 
					    #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    print(f"Location: {p['link'].split()[0]}\n\n")
 | 
					    if 'container_id' in p:
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            cont = json.decode(open(f"../containers/{p['container_id']}", 'r').read())
 | 
				
			||||||
 | 
					            if (time.time() - cont['update_ts']) > 43200:
 | 
				
			||||||
 | 
					                if ("QUERY_STRING" in os.environ) and ("force" in os.environ['QUERY_STRING'].lower()):
 | 
				
			||||||
 | 
					                    print(f"Location: {cont['link']}\n\n", end = '')
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    import random
 | 
				
			||||||
 | 
					                    new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
 | 
				
			||||||
 | 
					                    random.seed(new_seed)
 | 
				
			||||||
 | 
					                    surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
 | 
				
			||||||
 | 
					                    print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Посилання на пару {p['name']}, яке зберігається у сховищі, було отримане більш ніж 12 годин тому (рівно {time.time() - cont['update_ts']} секунд тому), тому, скоріш за все, не є дійсним.</p><p>На жаль, нового посилання ще не надходило, тому Ви можете або чекати на нього і оновлювати цю сторінку (перенаправлення станеться, щойно з'явиться нове посилання), або перейти вручну за старим посиланням (не рекомендується):</p><a href=\"{cont['link']}\">{cont['link']}</a><br><p>PS: щоб обійти цю сторінку та завжди автоматично переходити за будь-яким наявним посиланням, можна додати у рядок URL в кінці напис: ?force</p>")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                print(f"Location: {cont['link']}\n\n", end = '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            import random
 | 
				
			||||||
 | 
					            new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
 | 
				
			||||||
 | 
					            random.seed(new_seed)
 | 
				
			||||||
 | 
					            surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
 | 
				
			||||||
 | 
					            print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Під час спроби отримання посилання на пару {p['name']} сталася непередбачена помилка. Ви можете оновлювати сторінку, поки проблема не зникне (перенаправлення відбудеться, щойно все запрацює), або пошукати посилання де-інде.</p><p>Вибачте за тимчасові незручності(</p>")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        print(f"Location: {p['link'].split()[0]}\n\n", end = '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #print(f"Location: {p['link'].split()[0]}\n\n")
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user