diff --git a/modules/auto-schedule-pro/additions.json b/modules/auto-schedule-pro/additions.json index e71bbb4..33a1903 100644 --- a/modules/auto-schedule-pro/additions.json +++ b/modules/auto-schedule-pro/additions.json @@ -1,6 +1,6 @@ [ { - "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"} }, { }, diff --git a/modules/auto-schedule-pro/main.py b/modules/auto-schedule-pro/main.py index 9fa48ec..c68efbe 100644 --- a/modules/auto-schedule-pro/main.py +++ b/modules/auto-schedule-pro/main.py @@ -1,14 +1,5 @@ ## code ## -if (self.MESSAGE["text"].lower() == "!пара" or self.MESSAGE["text"].lower().split()[0] == "!пари"): - - #getting current time - 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 - +def get_full_schedule(): # baking defined schedule raw_schedule = json.loads( readfile(self.path + "schedule.json") ) schedule = {} @@ -30,34 +21,79 @@ if (self.MESSAGE["text"].lower() == "!пара" or self.MESSAGE["text"].lower(). schedule[ts] = new_item full_schedule = dict(list(schedule.items()) + list(additions.items())) + return full_schedule -if self.MESSAGE["text"].lower() == "!пара": - print("test1") - print(f"Full schedule printout: {full_schedule}") - print(f"Current delta_time: {current_seconds}") - p = None - next_lesson_time = None +if (self.MESSAGE["text"].lower() == "!пара" or self.MESSAGE["text"].lower().split()[0] == "!пари"): - key_list = list(full_schedule.keys()) - key_list.sort() - for i in key_list: - if i > current_seconds - 5400: - p = full_schedule[i] - next_lesson_time = i - break + #getting current time + 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 + + full_schedule = get_full_schedule() - print("test2") - if next_lesson_time == None: - actual_lesson_ts = reference_time + min(full_schedule.keys()) - dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts) - dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400) + if self.MESSAGE["text"].lower() == "!пара": + print("test1") + print(f"Full schedule printout: {full_schedule}") + print(f"Current delta_time: {current_seconds}") + lesson = None + next_lesson_time = None - if len(full_schedule.keys()) > 0: - print("test3.1") - p = full_schedule[min(full_schedule.keys())] - print("test3.1.1") + key_list = list(full_schedule.keys()) + key_list.sort() + for i in key_list: + if i > current_seconds - 5400: + lesson = full_schedule[i] + next_lesson_time = i + break - print("{} == 6 && {} == 1, {}".format(current_day, dt_lesson.strftime('%u'), str( ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")) ))) + print("test2") + if next_lesson_time == None: + actual_lesson_ts = reference_time + min(full_schedule.keys()) + dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts) + dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400) + + if len(full_schedule.keys()) > 0: + print("test3.1") + lesson = full_schedule[min(full_schedule.keys())] + print("test3.1.1") + + print("{} == 6 && {} == 1, {}".format(current_day, dt_lesson.strftime('%u'), str( ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")) ))) + + human_readable_date = "" + if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")): + human_readable_date += "завтра " + elif current_week != int(dt_lesson.strftime("%W")) % 2: + human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1]) + elif current_day != (int(dt_lesson.strftime("%u")) - 1): + human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1]) + else: + human_readable_date += "сьогодні " + + print("test3.1.2") + + human_readable_date += "з " + + print("test3.1.3") + human_readable_date += dt_lesson.strftime("%H:%M") + print("test3.1.4") + + human_readable_date += " до " + human_readable_date += dt_lesson_finish.strftime("%H:%M") + + self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(lesson['name'], human_readable_date, lesson['teacher'], lesson['link']) + print("test3.1.5") + else: + self.RESPONCE = "Пар немає взагалі. Ми вільні!" + + else: + print("test3.2") + actual_lesson_ts = reference_time + next_lesson_time + dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts) + dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400) human_readable_date = "" if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")): @@ -69,119 +105,87 @@ if self.MESSAGE["text"].lower() == "!пара": else: human_readable_date += "сьогодні " - print("test3.1.2") - human_readable_date += "з " - - print("test3.1.3") human_readable_date += dt_lesson.strftime("%H:%M") - print("test3.1.4") human_readable_date += " до " human_readable_date += dt_lesson_finish.strftime("%H:%M") - self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) - print("test3.1.5") - else: - self.RESPONCE = "Пар немає взагалі. Ми вільні!" + self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(lesson['name'], human_readable_date, lesson['teacher'], lesson['link']) - else: - print("test3.2") - actual_lesson_ts = reference_time + next_lesson_time - dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts) - dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400) + if self.MESSAGE["text"].lower().split()[0] == "!пари": + command = self.MESSAGE["text"].lower().split() - human_readable_date = "" - if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")): - human_readable_date += "завтра " - elif current_week != int(dt_lesson.strftime("%W")) % 2: - human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1]) - elif current_day != (int(dt_lesson.strftime("%u")) - 1): - human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1]) - else: - human_readable_date += "сьогодні " + preferences = {"name": True, "date": True, "teacher": True, "link": True} + selected_day = current_week*7 + current_day - human_readable_date += "з " - human_readable_date += dt_lesson.strftime("%H:%M") + if len(command) >= 2 and len(command[1]) > 0: + if command[1][0] == "+": + try: + selected_day += int(command[1][1:]) + except Exception as e: + print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}") + elif command[1][0] == "-": + try: + selected_day -= int(command[1][1:]) + except Exception as e: + print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}") + else: + try: + selected_day = int(command[1]) + except Exception as e: + print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}") - human_readable_date += " до " - human_readable_date += dt_lesson_finish.strftime("%H:%M") + # keeping day in bounds + selected_day = selected_day % 14 - self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) + if len(command) > 2: + for i in command[2:]: + if len(i) >= 2: + if i[1:] in preferences: + if i[0] == "+": + preferences[i[1:]] = True + elif i[0] == "-": + preferences[i[1:]] = False -if self.MESSAGE["text"].lower().split()[0] == "!пари": - command = self.MESSAGE["text"].lower().split() + found_lessons = {} + for i in full_schedule: + if selected_day*86400 <= i < (selected_day+1)*86400: + found_lessons[i] = dict(full_schedule[i]) - preferences = {"name": True, "date": True, "teacher": True, "link": True} - selected_day = current_week*7 + current_day + result_text = f"Пари у {self.WEEKDAYS_ACCUSATIVE[selected_day%7]}:\n\n" + for i in found_lessons: + actual_lesson_ts = reference_time + i + dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts) + dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400) + lesson = found_lessons[i] - if len(command) >= 2 and len(command[1]) > 0: - if command[1][0] == "+": - try: - selected_day += int(command[1][1:]) - except Exception as e: - print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}") - elif command[1][0] == "-": - try: - selected_day -= int(command[1][1:]) - except Exception as e: - print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}") - else: - try: - selected_day = int(command[1]) - except Exception as e: - print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}") + human_readable_date = "" + if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")): + human_readable_date += "завтра " + elif current_week != int(dt_lesson.strftime("%W")) % 2: + human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1]) + elif current_day != (int(dt_lesson.strftime("%u")) - 1): + human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1]) + else: + human_readable_date += "сьогодні " - # keeping day in bounds - selected_day = selected_day % 14 + human_readable_date += "з " + human_readable_date += dt_lesson.strftime("%H:%M") - if len(command) > 2: - for i in command[2:]: - if len(i) >= 2: - if i[1:] in preferences: - if i[0] == "+": - preferences[i[1:]] = True - elif i[0] == "-": - preferences[i[1:]] = False - - found_lessons = {} - for i in full_schedule: - if selected_day*86400 <= i < (selected_day+1)*86400: - found_lessons[i] = dict(full_schedule[i]) - - result_text = f"Пари у {self.WEEKDAYS_ACCUSATIVE[selected_day%7]}:\n\n" - for i in found_lessons: - actual_lesson_ts = reference_time + i - dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts) - dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400) - p = found_lessons[i] - - human_readable_date = "" - if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")): - human_readable_date += "завтра " - elif current_week != int(dt_lesson.strftime("%W")) % 2: - human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1]) - elif current_day != (int(dt_lesson.strftime("%u")) - 1): - human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1]) - else: - human_readable_date += "сьогодні " - - human_readable_date += "з " - human_readable_date += dt_lesson.strftime("%H:%M") - - human_readable_date += " до " - human_readable_date += dt_lesson_finish.strftime("%H:%M") + human_readable_date += " до " + human_readable_date += dt_lesson_finish.strftime("%H:%M") - if preferences['name']: - result_text += f"Назва: {p['name']}\n" - if preferences['date']: - result_text += f"Дата: {human_readable_date}\n" - if preferences['teacher']: - result_text += f"Викладач: {p['teacher']}\n" - if preferences['link']: - result_text += f"Посилання на пару: {p['link']}\n" + if preferences['name']: + result_text += f"Назва: {lesson['name']}\n" + if preferences['date']: + result_text += f"Дата: {human_readable_date}\n" + if preferences['teacher']: + result_text += f"Викладач: {lesson['teacher']}\n" + if preferences['link']: + result_text += f"Посилання на пару: {lesson['link']}\n" - result_text += "\n" + result_text += "\n" - self.RESPONCE = result_text + self.RESPONCE = result_text diff --git a/modules/auto-schedule-pro/schedule.json b/modules/auto-schedule-pro/schedule.json index e7bb0cc..3bb046d 100644 --- a/modules/auto-schedule-pro/schedule.json +++ b/modules/auto-schedule-pro/schedule.json @@ -1,52 +1,52 @@ [ { - "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-osi-lup-ou8"}, - "12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Онуфрієнко О. П.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} + "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-osi-lup-ou8"}, + "12:20": {"name": "Культура мовлення та ділове мовлення (лекція)", "teacher": "Онуфрієнко О. П.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} }, { - "12:20": {"name": "Практичний курс іноземної мови. Частина 1", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"}, - "14:15": {"name": "Фізика", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} + "12:20": {"name": "Практичний курс іноземної мови. Частина 1 (практика)", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"}, + "14:15": {"name": "Фізика (лабораторна)", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} }, { - "8:30": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}, - "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} + "8:30": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування (лабораторна)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}, + "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": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, - "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} + "10:25": {"name": "Вища математика (лекція)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, + "12:20": {"name": "Фізика (лекція)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, + "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування (лекція)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} }, { - "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, - "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"} + "10:25": {"name": "Фізика (практика)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, + "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-osi-lup-ou8"}, - "12:20": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} + "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-osi-lup-ou8"}, + "12:20": {"name": "Вища математика (лекція)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} }, { - "8:30": {"name": "Комп'ютерна логіка", "teacher": "Верба О. А.", "link": "https://us04web.zoom.us/j/7382214783?pwd=RnZ3SWgwK1JoVkZtNndnKzdPZjFGdz09"}, - "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, - "12:20": {"name": "Практичний курс іноземної мови. Частина 1", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"}, - "14:15": {"name": "Фізика", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} + "8:30": {"name": "Комп'ютерна логіка (лабораторна)", "teacher": "Верба О. А.", "link": "https://us04web.zoom.us/j/7382214783?pwd=RnZ3SWgwK1JoVkZtNndnKzdPZjFGdz09"}, + "10:25": {"name": "Вища математика (практика)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, + "12:20": {"name": "Практичний курс іноземної мови. Частина 1 (практика)", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"}, + "14:15": {"name": "Фізика (лабораторна)", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} }, { - "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"} }, { - "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, - "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, - "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} + "10:25": {"name": "Вища математика (лекція)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, + "12:20": {"name": "Фізика (лекція)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, + "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування (лекція)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} }, { - "10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, - "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"} + "10:25": {"name": "Фізика (практика)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, + "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"} }, {}, {}