forked from dymik739/modular-bot-framework-for-telegram
		
	add new module: auto-schedule-pro
This commit is contained in:
		
							parent
							
								
									147a7f5da2
								
							
						
					
					
						commit
						b97a7dad5b
					
				
							
								
								
									
										26
									
								
								modules/auto-schedule-pro/additions.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								modules/auto-schedule-pro/additions.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {},
 | 
				
			||||||
 | 
					    {},
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {},
 | 
				
			||||||
 | 
					    {}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										127
									
								
								modules/auto-schedule-pro/index.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								modules/auto-schedule-pro/index.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,127 @@
 | 
				
			|||||||
 | 
					## env approximation ##
 | 
				
			||||||
 | 
					'''
 | 
				
			||||||
 | 
					import datetime, json, time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Self:
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        self.path = ""
 | 
				
			||||||
 | 
					        self.WEEKDAY_NAMES_ROD = ["понеділка", "вівторка", "середи", "четверга", "п'ятниці", "суботи", "неділі"]
 | 
				
			||||||
 | 
					        self.WEEKDAY_NAMES_ROD_WITH_NEXT = ["наступного понеділка", "наступного вівторка", "наступної середи", "наступного четверга", "наступної п'ятниці", "наступної суботи", "наступної неділі"]
 | 
				
			||||||
 | 
					        self.WEEKDAY_NAMES_ROD_WITH_THIS = ["цього понеділка", "цього вівторка", "цієї середи", "цього четверга", "цієї п'ятниці", "цієї суботи", "цієї неділі"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def readfile(path):
 | 
				
			||||||
 | 
					    return open(path).read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					self = Self()
 | 
				
			||||||
 | 
					'''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## code ##
 | 
				
			||||||
 | 
					if self.MESSAGE["text"].lower() == "!пара":
 | 
				
			||||||
 | 
					    current_time = datetime.datetime.now()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    current_week = current_time.isocalendar()[1] % 2
 | 
				
			||||||
 | 
					    current_day = current_time.weekday()
 | 
				
			||||||
 | 
					    current_seconds = current_week*604800 + current_day*86400 + current_time.hour*3600 + current_time.minute*60 + current_time.second
 | 
				
			||||||
 | 
					    reference_time = int(current_time.strftime("%s")) - current_seconds
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # baking defined schedule
 | 
				
			||||||
 | 
					    raw_schedule = json.loads( readfile(self.path + "schedule.json") )
 | 
				
			||||||
 | 
					    schedule = {}
 | 
				
			||||||
 | 
					    for day in range(len(raw_schedule)):
 | 
				
			||||||
 | 
					        for i in raw_schedule[day]:
 | 
				
			||||||
 | 
					            ts = day*86400 + int(i.split(":")[0])*3600 + int(i.split(":")[1])*60
 | 
				
			||||||
 | 
					            new_item = dict(raw_schedule[day][i])
 | 
				
			||||||
 | 
					            new_item["source"] = "schedule"
 | 
				
			||||||
 | 
					            schedule[ts] = new_item
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # baking additions (extra pairs)
 | 
				
			||||||
 | 
					    raw_additions = json.loads( readfile(self.path + "additions.json") )
 | 
				
			||||||
 | 
					    additions = {}
 | 
				
			||||||
 | 
					    for day in range(len(raw_additions)):
 | 
				
			||||||
 | 
					        for i in raw_additions[day]:
 | 
				
			||||||
 | 
					            ts = day*86400 + int(i.split(":")[0])*3600 + int(i.split(":")[1])*60
 | 
				
			||||||
 | 
					            new_item = dict(raw_additions[day][i])
 | 
				
			||||||
 | 
					            new_item["source"] = "additions"
 | 
				
			||||||
 | 
					            schedule[ts] = new_item
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    full_schedule = dict(list(schedule.items()) + list(additions.items()))
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    print("test1")
 | 
				
			||||||
 | 
					    print(f"Full schedule printout: {full_schedule}")
 | 
				
			||||||
 | 
					    print(f"Current delta_time: {current_seconds}")
 | 
				
			||||||
 | 
					    p = None
 | 
				
			||||||
 | 
					    next_pair_time = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    key_list = list(full_schedule.keys())
 | 
				
			||||||
 | 
					    key_list.sort()
 | 
				
			||||||
 | 
					    for i in key_list:
 | 
				
			||||||
 | 
					        if i > current_seconds - 5400:
 | 
				
			||||||
 | 
					            p = full_schedule[i]
 | 
				
			||||||
 | 
					            next_pair_time = i
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print("test2")
 | 
				
			||||||
 | 
					    if next_pair_time == None:
 | 
				
			||||||
 | 
					        if len(full_schedule.keys()) > 0:
 | 
				
			||||||
 | 
					            print("test3.1")
 | 
				
			||||||
 | 
					            actual_pair_ts = reference_time + min(full_schedule.keys())
 | 
				
			||||||
 | 
					            dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
 | 
				
			||||||
 | 
					            p = full_schedule[min(full_schedule.keys())]
 | 
				
			||||||
 | 
					            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")) )))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            human_readable_date = ""
 | 
				
			||||||
 | 
					            if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
 | 
				
			||||||
 | 
					                human_readable_date += "завтра "
 | 
				
			||||||
 | 
					            elif current_week != int(dt_pair.strftime("%W")) % 2:
 | 
				
			||||||
 | 
					                human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_NEXT[int(dt_pair.strftime("%u")) - 1])
 | 
				
			||||||
 | 
					            elif current_day != (int(dt_pair.strftime("%u")) - 1):
 | 
				
			||||||
 | 
					                human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_THIS[int(dt_pair.strftime("%u")) - 1])
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                human_readable_date += "сьогодні "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            print("test3.1.2")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if int(dt_pair.strftime("%H")) == 11:
 | 
				
			||||||
 | 
					                human_readable_date += "об "
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                human_readable_date += "о "
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            print("test3.1.3")
 | 
				
			||||||
 | 
					            human_readable_date += dt_pair.strftime("%H:%M")
 | 
				
			||||||
 | 
					            print("test3.1.4")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
 | 
				
			||||||
 | 
					            print("test3.1.5")
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.RESPONCE = "Пар немає взагалі. Ми вільні!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        print("test3.2")
 | 
				
			||||||
 | 
					        actual_pair_ts = reference_time + next_pair_time
 | 
				
			||||||
 | 
					        dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        print(f"Debug: selected pair at {next_pair_time}")
 | 
				
			||||||
 | 
					        print(f"{current_day} == 6 && {dt_pair.strftime('%u')} == 1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        human_readable_date = ""
 | 
				
			||||||
 | 
					        if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
 | 
				
			||||||
 | 
					            human_readable_date += "завтра "
 | 
				
			||||||
 | 
					        elif current_week != int(dt_pair.strftime("%W")) % 2:
 | 
				
			||||||
 | 
					            human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_NEXT[int(dt_pair.strftime("%u")) - 1])
 | 
				
			||||||
 | 
					        elif current_day != (int(dt_pair.strftime("%u")) - 1):
 | 
				
			||||||
 | 
					            human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_THIS[int(dt_pair.strftime("%u")) - 1])
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            human_readable_date += "сьогодні "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if int(dt_pair.strftime("%H")) == 11:
 | 
				
			||||||
 | 
					            human_readable_date += "об "
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            human_readable_date += "о "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        human_readable_date += dt_pair.strftime("%H:%M")
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
 | 
				
			||||||
							
								
								
									
										7
									
								
								modules/auto-schedule-pro/meta.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								modules/auto-schedule-pro/meta.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "start_on_boot": true,
 | 
				
			||||||
 | 
					    "alias": "auto-schedule-pro",
 | 
				
			||||||
 | 
					    "version": 1,
 | 
				
			||||||
 | 
					    "index_file": "index.py",
 | 
				
			||||||
 | 
					    "predefine": "predefine.py"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								modules/auto-schedule-pro/predefine.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								modules/auto-schedule-pro/predefine.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					self.WEEKDAY_NAMES_ROD_WITH_NEXT = ["наступного понеділка", "наступного вівторка", "наступної середи", "наступного четверга", "наступної п'ятниці", "наступної суботи", "наступної неділі"]
 | 
				
			||||||
 | 
					self.WEEKDAY_NAMES_ROD_WITH_THIS = ["цього понеділка", "цього вівторка", "цієї середи", "цього четверга", "цієї п'ятниці", "цієї суботи", "цієї неділі"]
 | 
				
			||||||
 | 
					self.current_seconds = 0
 | 
				
			||||||
							
								
								
									
										53
									
								
								modules/auto-schedule-pro/schedule.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								modules/auto-schedule-pro/schedule.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "8:30": {"name": "Дискретна математика", "teacher": "Новотарський М. А.", "link": "https://us02web.zoom.us/j/87578307057?pwd=UGwyVGlwc3M4Q0Q0Q0NLWUt6bmVpUT09"},
 | 
				
			||||||
 | 
					        "10:25": {"name": "Комп'ютерна логіка", "teacher": "Жабін В. І.", "link": "https://bbb.comsys.kpi.ua/b/val-2vb-o7w-y5y АБО https://bbb.ugrid.org/b/val-2vb-o7w-y5y"},
 | 
				
			||||||
 | 
					        "12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Онуфрієнко О. П.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "12:20": {"name": "Практичний курс іноземної мови. Частина 1", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"},
 | 
				
			||||||
 | 
					        "14:15": {"name": "Фізика", "teacher": "Федотов В. В.", "link": "https://us04web.zoom.us/j/77206071753?pwd=8Ui3XaBNmA626wkHwJf3JhB6ecB5N3.1"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "8:30": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"},
 | 
				
			||||||
 | 
					        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"},
 | 
				
			||||||
 | 
					        "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
				
			||||||
 | 
					        "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
				
			||||||
 | 
					        "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"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {},
 | 
				
			||||||
 | 
					    {},
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "8:30": {"name": "Дискретна математика", "teacher": "Новотарський М. А.", "link": "https://us02web.zoom.us/j/87578307057?pwd=UGwyVGlwc3M4Q0Q0Q0NLWUt6bmVpUT09"},
 | 
				
			||||||
 | 
					        "10:25": {"name": "Комп'ютерна логіка", "teacher": "Жабін В. І.", "link": "https://bbb.comsys.kpi.ua/b/val-2vb-o7w-y5y АБО https://bbb.ugrid.org/b/val-2vb-o7w-y5y"},
 | 
				
			||||||
 | 
					        "12:20": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "8:30": {"name": "Комп'ютерна логіка", "teacher": "Верба О. А.", "link": "(Старе посилання!) https://us04web.zoom.us/j/7382214783?pwd=RnZ3SWgwK1JoVkZtNndnKzdPZjFGdz09"},
 | 
				
			||||||
 | 
					        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"},
 | 
				
			||||||
 | 
					        "12:20": {"name": "Практичний курс іноземної мови. Частина 1", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"},
 | 
				
			||||||
 | 
					        "14:15": {"name": "Фізика", "teacher": "Федотов В. В.", "link": ""}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"},
 | 
				
			||||||
 | 
					        "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
				
			||||||
 | 
					        "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"},
 | 
				
			||||||
 | 
					        "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"}
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {},
 | 
				
			||||||
 | 
					    {}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user