From 93774672d793d5daf45766200475df4844e0bf46 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Wed, 9 Nov 2022 22:06:14 +0200 Subject: [PATCH 01/23] auto-schedule: hotfix - added missing 'f' --- modules/auto-schedule/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/auto-schedule/index.py b/modules/auto-schedule/index.py index 677f98a..b3fa369 100644 --- a/modules/auto-schedule/index.py +++ b/modules/auto-schedule/index.py @@ -42,4 +42,4 @@ if self.MESSAGE["text"].lower() == "!пара": self.RESPONCE = "Сьогодні більше немає пар" except Exception as e: - print("[WARN] module: auto-schedule: failed to process schedule.json ({e})") + print(f"[WARN] module: auto-schedule: failed to process schedule.json ({e})") From d013f927616804823e7fb47afb36224edbf4adaa Mon Sep 17 00:00:00 2001 From: dymik739 Date: Mon, 14 Nov 2022 17:36:12 +0200 Subject: [PATCH 02/23] module: auto-schedule: one-time link update --- modules/auto-schedule/schedule.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/auto-schedule/schedule.json b/modules/auto-schedule/schedule.json index 7f97be7..98c3c71 100644 --- a/modules/auto-schedule/schedule.json +++ b/modules/auto-schedule/schedule.json @@ -41,7 +41,7 @@ "lector": "Ванєєва О. О." }, "2": { - "link": "https://us02web.zoom.us/j/5060383482?pwd=Qk9HZGtIdVdFVHNFd0ZCY1lJbitvdz09", + "link": "https://bbb.comsys.kpi.ua/b/dxa-2gr-2dc-odu", "subject": "Програмування", "lector": "Новотарський М. А." }, From 9d81c89c8e7ba42a71706a93551292890f7feefe Mon Sep 17 00:00:00 2001 From: dymik739 Date: Wed, 16 Nov 2022 12:08:43 +0200 Subject: [PATCH 03/23] auto-schedule: update programming link --- modules/auto-schedule/schedule.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/auto-schedule/schedule.json b/modules/auto-schedule/schedule.json index 98c3c71..7f97be7 100644 --- a/modules/auto-schedule/schedule.json +++ b/modules/auto-schedule/schedule.json @@ -41,7 +41,7 @@ "lector": "Ванєєва О. О." }, "2": { - "link": "https://bbb.comsys.kpi.ua/b/dxa-2gr-2dc-odu", + "link": "https://us02web.zoom.us/j/5060383482?pwd=Qk9HZGtIdVdFVHNFd0ZCY1lJbitvdz09", "subject": "Програмування", "lector": "Новотарський М. А." }, From 5894ae3c5049a194c4a583f4f3d496743eefcb2f Mon Sep 17 00:00:00 2001 From: dymik739 Date: Thu, 24 Nov 2022 13:18:19 +0200 Subject: [PATCH 04/23] main.py: added delay between processing messages (will be variable later) --- main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.py b/main.py index ba07c41..2e099d8 100644 --- a/main.py +++ b/main.py @@ -185,6 +185,8 @@ def queue_processor(): break del message_queue[0] + + time.sleep(0.1) else: if STOP_REQUESTED: break From 3e907016460e22446104ebec250a83f9f655e2ee Mon Sep 17 00:00:00 2001 From: dymik739 Date: Wed, 14 Dec 2022 14:17:57 +0200 Subject: [PATCH 05/23] auto-schedule: schedule.json - updated computer logic permanent link --- modules/auto-schedule/schedule.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/auto-schedule/schedule.json b/modules/auto-schedule/schedule.json index 7f97be7..dd4b943 100644 --- a/modules/auto-schedule/schedule.json +++ b/modules/auto-schedule/schedule.json @@ -46,7 +46,7 @@ "lector": "Новотарський М. А." }, "3": { - "link": "https://bbb.comsys.kpi.ua/b/val-zdp-vw0-dbr", + "link": "https://bbb.ugrid.org/b/val-zdp-vw0-dbr", "subject": "Комп'ютерна логіка", "lector": "Жабін В. І." } @@ -122,7 +122,7 @@ "lector": "Новотарський М. А." }, "3": { - "link": "https://bbb.comsys.kpi.ua/b/val-zdp-vw0-dbr", + "link": "https://bbb.ugrid.org/b/val-zdp-vw0-dbr", "subject": "Комп'ютерна логіка", "lector": "Жабін В. І." } From d87de2c76739b4e7975911930e9b382b3d5b4443 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Tue, 20 Dec 2022 17:39:18 +0200 Subject: [PATCH 06/23] auto-schedule: adapted timezone shift to diplay time for a different country --- modules/auto-schedule/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/auto-schedule/index.py b/modules/auto-schedule/index.py index b3fa369..7b1ba1d 100644 --- a/modules/auto-schedule/index.py +++ b/modules/auto-schedule/index.py @@ -6,7 +6,7 @@ if self.MESSAGE["text"].lower() == "!пара": current_week = current_time.isocalendar()[1] % 2 current_day = current_time.weekday() - current_seconds = current_time.hour * 3600 + current_time.minute * 60 + current_time.second + current_seconds = (current_time.hour + 1) * 3600 + current_time.minute * 60 + current_time.second print(f"[DEBUG] Current day is {type(current_day)}({current_day})") if current_day > 4 or current_day < 0: From 43b5984517d1db99b94e426656667ee7964c5cd4 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Sat, 25 Feb 2023 15:50:06 +0200 Subject: [PATCH 07/23] auto-schedule: revert time correction and change command to old --- modules/auto-schedule/index.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/auto-schedule/index.py b/modules/auto-schedule/index.py index 7b1ba1d..ebb1e6c 100644 --- a/modules/auto-schedule/index.py +++ b/modules/auto-schedule/index.py @@ -1,4 +1,4 @@ -if self.MESSAGE["text"].lower() == "!пара": +if self.MESSAGE["text"].lower() == "!пара-old": try: schedule = json.loads( readfile(self.path + "schedule.json") ) @@ -6,7 +6,7 @@ if self.MESSAGE["text"].lower() == "!пара": current_week = current_time.isocalendar()[1] % 2 current_day = current_time.weekday() - current_seconds = (current_time.hour + 1) * 3600 + current_time.minute * 60 + current_time.second + current_seconds = current_time.hour * 3600 + current_time.minute * 60 + current_time.second print(f"[DEBUG] Current day is {type(current_day)}({current_day})") if current_day > 4 or current_day < 0: From 147a7f5da29d95313a01867c51c5a24357390f11 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Sat, 25 Feb 2023 15:53:35 +0200 Subject: [PATCH 08/23] add new module: irc-bridge --- modules/irc-bridge/bot.py | 122 ++++++++++++++++++++++++++++++++ modules/irc-bridge/index.py | 10 +++ modules/irc-bridge/meta.json | 7 ++ modules/irc-bridge/predefine.py | 5 ++ 4 files changed, 144 insertions(+) create mode 100644 modules/irc-bridge/bot.py create mode 100644 modules/irc-bridge/index.py create mode 100644 modules/irc-bridge/meta.json create mode 100644 modules/irc-bridge/predefine.py diff --git a/modules/irc-bridge/bot.py b/modules/irc-bridge/bot.py new file mode 100644 index 0000000..93392c8 --- /dev/null +++ b/modules/irc-bridge/bot.py @@ -0,0 +1,122 @@ +import time +import socket +import threading + +login_lines_raw = [ + "NICK bridge", + "USER bridge bridge * !", + "JOIN #io23-bridge" +] + +login_lines = map( lambda x: (x + "\n").encode("utf-8"), login_lines_raw ) + +recv_s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +send_buffer = [] +reconnecting = False + +LINE_END = "\r\n".encode("utf-8") + +recv_s.bind( ("127.0.0.1", 5001) ) + +def reconnect(): + global s, reconnecting + reconnecting = True + while True: + try: + s.close() + except: + pass + + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect( ("10.1.1.1", 6667) ) + + for i in login_lines: + s.send(i) + time.sleep(0.5) + + reconnecting = False + break + except Exception as e: + print(f"[reconnect:main] ERROR: got exception {e}") + t = time.time() + open("error.log", "a", encoding = "utf-8").write(f"[{t}] recv_thread:main ERROR: got exception {e}\n") + + time.sleep(2) + +def recv_thread(): + global s, send_buffer, reconnecting + databuffer = bytes() + while True: + try: + new_data = s.recv(1024) + print(f"[DEBUG] new_data: {new_data}") + if len(new_data) == 0: + if not reconnecting: + reconnect() # bin the old socket and get a new one instead + continue + + databuffer += new_data + + if LINE_END in databuffer: + commands = map( lambda x: x.decode("UTF-8"), databuffer.split(LINE_END)[:-1]) + + for command in commands: + if len(command) > 0: + if command.split(" ")[0] == "PING": + print("[DEBUG] recv_thread:command:ping: Responding with {}".format(command.split(" ")[1]).encode("UTF-8")) + send_buffer.append(("PONG {}\n".format( command.split(" ")[1]).encode("UTF-8") )) + else: + pass + + databuffer = databuffer.split(LINE_END)[-1] + except Exception as e: + print(f"[recv_thread:main] ERROR: got exception {e}") + t = time.time() + open("error.log", "a", encoding = "utf-8").write(f"[{t}] recv_thread:main ERROR: got exception {e}\n") + try: + if not reconnecting: + reconnect() + except Exception as e: + print(f"[recv_thread:except:reconnect] ERROR: got exception {e}") + t = time.time() + open("error.log", "a", encoding = "utf-8").write(f"[{t}] recv_thread:except:reconnect ERROR: got exception {e}\n") + +def send_thread(): + global s, send_buffer, reconnecting + while True: + if len(send_buffer) > 0: + try: + print(f"[DEBUG] send_thread: sending {send_buffer[0]}") + s.send(send_buffer[0]) + del send_buffer[0] + except Exception as e: + print(f"[send_thread:main] ERROR: got exception {e}") + t = time.time() + open("error.log", "a", encoding = "utf-8").write(f"[{t}] send_thread:main ERROR: got exception {e}\n") + + if not reconnecting: + reconnect() + + time.sleep(0.2) + else: + time.sleep(3) + +def msg_thread(): + global recv_s, send_buffer + while True: + d = recv_s.recvfrom(16384) + print(f"[DEBUG] msg_thread:d: {d}") + send_buffer.append(d[0]) + +st = threading.Thread(target = send_thread, args = []) +rt = threading.Thread(target = recv_thread, args = []) +mt = threading.Thread(target = msg_thread, args = []) + +reconnect() + +st.start() +rt.start() +mt.start() diff --git a/modules/irc-bridge/index.py b/modules/irc-bridge/index.py new file mode 100644 index 0000000..e27e77f --- /dev/null +++ b/modules/irc-bridge/index.py @@ -0,0 +1,10 @@ +if self.MESSAGE["chat"]["id"] == -1001570221452: + l = min( len(self.MESSAGE["text"]), 300 ) + new_msg = "{} {}: {}".format(self.MESSAGE.from_user.first_name,\ + self.MESSAGE.from_user.last_name,\ + self.MESSAGE.text.replace("\n", " | ")[:l]) + + import socket + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.sendto(f"PRIVMSG #io23-bridge :{new_msg}\n".encode("utf-8"), ("127.0.0.1", 5001)) + del s diff --git a/modules/irc-bridge/meta.json b/modules/irc-bridge/meta.json new file mode 100644 index 0000000..0309cdc --- /dev/null +++ b/modules/irc-bridge/meta.json @@ -0,0 +1,7 @@ +{ + "start_on_boot": true, + "alias": "irc-bridge", + "version": 1, + "index_file": "index.py", + "predefine": "predefine.py" +} diff --git a/modules/irc-bridge/predefine.py b/modules/irc-bridge/predefine.py new file mode 100644 index 0000000..7d007f2 --- /dev/null +++ b/modules/irc-bridge/predefine.py @@ -0,0 +1,5 @@ +import socket + +SEND_ADDR = ( "127.0.0.1", 5001 ) + +s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) From b97a7dad5b933218eb97140c1b06cbcf21b686f6 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Sat, 25 Feb 2023 15:54:16 +0200 Subject: [PATCH 09/23] add new module: auto-schedule-pro --- modules/auto-schedule-pro/additions.json | 26 +++++ modules/auto-schedule-pro/index.py | 127 +++++++++++++++++++++++ modules/auto-schedule-pro/meta.json | 7 ++ modules/auto-schedule-pro/predefine.py | 3 + modules/auto-schedule-pro/schedule.json | 53 ++++++++++ 5 files changed, 216 insertions(+) create mode 100644 modules/auto-schedule-pro/additions.json create mode 100644 modules/auto-schedule-pro/index.py create mode 100644 modules/auto-schedule-pro/meta.json create mode 100644 modules/auto-schedule-pro/predefine.py create mode 100644 modules/auto-schedule-pro/schedule.json diff --git a/modules/auto-schedule-pro/additions.json b/modules/auto-schedule-pro/additions.json new file mode 100644 index 0000000..f253ddf --- /dev/null +++ b/modules/auto-schedule-pro/additions.json @@ -0,0 +1,26 @@ +[ + { + }, + { + }, + { + }, + { + }, + { + }, + {}, + {}, + { + }, + { + }, + { + }, + { + }, + { + }, + {}, + {} +] diff --git a/modules/auto-schedule-pro/index.py b/modules/auto-schedule-pro/index.py new file mode 100644 index 0000000..1e37a4d --- /dev/null +++ b/modules/auto-schedule-pro/index.py @@ -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']) diff --git a/modules/auto-schedule-pro/meta.json b/modules/auto-schedule-pro/meta.json new file mode 100644 index 0000000..732f1ea --- /dev/null +++ b/modules/auto-schedule-pro/meta.json @@ -0,0 +1,7 @@ +{ + "start_on_boot": true, + "alias": "auto-schedule-pro", + "version": 1, + "index_file": "index.py", + "predefine": "predefine.py" +} diff --git a/modules/auto-schedule-pro/predefine.py b/modules/auto-schedule-pro/predefine.py new file mode 100644 index 0000000..6b13627 --- /dev/null +++ b/modules/auto-schedule-pro/predefine.py @@ -0,0 +1,3 @@ +self.WEEKDAY_NAMES_ROD_WITH_NEXT = ["наступного понеділка", "наступного вівторка", "наступної середи", "наступного четверга", "наступної п'ятниці", "наступної суботи", "наступної неділі"] +self.WEEKDAY_NAMES_ROD_WITH_THIS = ["цього понеділка", "цього вівторка", "цієї середи", "цього четверга", "цієї п'ятниці", "цієї суботи", "цієї неділі"] +self.current_seconds = 0 diff --git a/modules/auto-schedule-pro/schedule.json b/modules/auto-schedule-pro/schedule.json new file mode 100644 index 0000000..224c62c --- /dev/null +++ b/modules/auto-schedule-pro/schedule.json @@ -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"} + }, + {}, + {} +] From 83e19452a0608b88954d8de41b7b5b662a932791 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Sat, 25 Feb 2023 15:54:49 +0200 Subject: [PATCH 10/23] add .gitignore file --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e7d28ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +config/* +modules/irc-bridge/error.log From 7ef1931331c6cfc880adfc26503f683b1fae8502 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Sun, 26 Feb 2023 10:28:31 +0200 Subject: [PATCH 11/23] auto-schedule-pro: add pair ending time --- modules/auto-schedule-pro/index.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/modules/auto-schedule-pro/index.py b/modules/auto-schedule-pro/index.py index 1e37a4d..39c7a6c 100644 --- a/modules/auto-schedule-pro/index.py +++ b/modules/auto-schedule-pro/index.py @@ -68,6 +68,7 @@ if self.MESSAGE["text"].lower() == "!пара": print("test3.1") actual_pair_ts = reference_time + min(full_schedule.keys()) 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())] print("test3.1.1") @@ -85,15 +86,21 @@ if self.MESSAGE["text"].lower() == "!пара": print("test3.1.2") + ''' if int(dt_pair.strftime("%H")) == 11: human_readable_date += "об " else: human_readable_date += "о " + ''' + human_readable_date += "з " print("test3.1.3") human_readable_date += dt_pair.strftime("%H:%M") print("test3.1.4") + human_readable_date += " до " + human_readable_date += dt_pair_finish.strftime("%H:%M") + self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) print("test3.1.5") else: @@ -103,6 +110,7 @@ if self.MESSAGE["text"].lower() == "!пара": print("test3.2") actual_pair_ts = reference_time + next_pair_time dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts) + dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400) print(f"Debug: selected pair at {next_pair_time}") print(f"{current_day} == 6 && {dt_pair.strftime('%u')} == 1") @@ -117,11 +125,16 @@ if self.MESSAGE["text"].lower() == "!пара": else: human_readable_date += "сьогодні " + ''' if int(dt_pair.strftime("%H")) == 11: human_readable_date += "об " else: human_readable_date += "о " - + ''' + human_readable_date += "з " human_readable_date += dt_pair.strftime("%H:%M") - + + human_readable_date += " до " + human_readable_date += dt_pair_finish.strftime("%H:%M") + self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) From c3a9e002b9fa91083fdb82cdac03f4912867a985 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Wed, 1 Mar 2023 17:03:12 +0200 Subject: [PATCH 12/23] auto-schedule-pro: schedule file update --- modules/auto-schedule-pro/schedule.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/auto-schedule-pro/schedule.json b/modules/auto-schedule-pro/schedule.json index 224c62c..8c7eb21 100644 --- a/modules/auto-schedule-pro/schedule.json +++ b/modules/auto-schedule-pro/schedule.json @@ -6,7 +6,7 @@ }, { "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"} + "14:15": {"name": "Фізика", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} }, { "8:30": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}, @@ -19,8 +19,8 @@ }, { "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"} + "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"} }, {}, {}, @@ -30,10 +30,10 @@ "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"}, + "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": ""} + "14:15": {"name": "Фізика", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} }, { "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"} @@ -46,7 +46,7 @@ { "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"} + "14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"} }, {}, {} From f52757a8f1a56bfa883d0de63c0598acf248fe6f Mon Sep 17 00:00:00 2001 From: dymik739 Date: Sat, 4 Mar 2023 16:44:44 +0200 Subject: [PATCH 13/23] auto-schedule-pro: add schedule lookup function --- modules/auto-schedule-pro/index.py | 124 ++++++++++++++++++++++--- modules/auto-schedule-pro/predefine.py | 1 + 2 files changed, 110 insertions(+), 15 deletions(-) diff --git a/modules/auto-schedule-pro/index.py b/modules/auto-schedule-pro/index.py index 39c7a6c..cbd5c39 100644 --- a/modules/auto-schedule-pro/index.py +++ b/modules/auto-schedule-pro/index.py @@ -86,12 +86,6 @@ if self.MESSAGE["text"].lower() == "!пара": print("test3.1.2") - ''' - if int(dt_pair.strftime("%H")) == 11: - human_readable_date += "об " - else: - human_readable_date += "о " - ''' human_readable_date += "з " print("test3.1.3") @@ -112,8 +106,102 @@ if self.MESSAGE["text"].lower() == "!пара": dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts) dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400) - 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 += "сьогодні " + + human_readable_date += "з " + human_readable_date += dt_pair.strftime("%H:%M") + + human_readable_date += " до " + human_readable_date += dt_pair_finish.strftime("%H:%M") + + self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) + +if self.MESSAGE["text"].lower().split()[0] == "!пари": + command = self.MESSAGE["text"].lower().split() + + 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())) + + preferences = {"name": True, "date": True, "teacher": True, "link": False} + selected_day = current_week*7 + current_day + + 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]}") + + # keeping day in bounds + while selected_day > 13: + selected_day -= 14 + while selected_day < 0: + selected_day += 14 + + 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_pairs = {} + for i in full_schedule: + if selected_day*86400 <= i < (selected_day+1)*86400: + found_pairs[i] = dict(full_schedule[i]) + + result_text = f"Пари у {self.WEEKDAY_NAMES_ZNAH[selected_day%7]}:\n\n" + for i in found_pairs: + actual_pair_ts = reference_time + i + dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts) + dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400) + p = found_pairs[i] human_readable_date = "" if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")): @@ -125,16 +213,22 @@ if self.MESSAGE["text"].lower() == "!пара": else: human_readable_date += "сьогодні " - ''' - if int(dt_pair.strftime("%H")) == 11: - human_readable_date += "об " - else: - human_readable_date += "о " - ''' human_readable_date += "з " human_readable_date += dt_pair.strftime("%H:%M") human_readable_date += " до " human_readable_date += dt_pair_finish.strftime("%H:%M") - self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) + + 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" + + result_text += "\n" + + self.RESPONCE = result_text diff --git a/modules/auto-schedule-pro/predefine.py b/modules/auto-schedule-pro/predefine.py index 6b13627..6092c07 100644 --- a/modules/auto-schedule-pro/predefine.py +++ b/modules/auto-schedule-pro/predefine.py @@ -1,3 +1,4 @@ +self.WEEKDAY_NAMES_ZNAH = ["понедулок", "вівторок", "середу", "четвер", "п'ятницю", "суботу", "неділю"] self.WEEKDAY_NAMES_ROD_WITH_NEXT = ["наступного понеділка", "наступного вівторка", "наступної середи", "наступного четверга", "наступної п'ятниці", "наступної суботи", "наступної неділі"] self.WEEKDAY_NAMES_ROD_WITH_THIS = ["цього понеділка", "цього вівторка", "цієї середи", "цього четверга", "цієї п'ятниці", "цієї суботи", "цієї неділі"] self.current_seconds = 0 From 969b89f29746bc11b15dedd332fa184267a6c682 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Wed, 15 Mar 2023 16:59:06 +0200 Subject: [PATCH 14/23] auto-schedule-pro: update links --- modules/auto-schedule-pro/schedule.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/auto-schedule-pro/schedule.json b/modules/auto-schedule-pro/schedule.json index 8c7eb21..62ee37f 100644 --- a/modules/auto-schedule-pro/schedule.json +++ b/modules/auto-schedule-pro/schedule.json @@ -1,7 +1,7 @@ [ { "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"}, + "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": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} }, { @@ -10,10 +10,10 @@ }, { "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://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} }, { - "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"}, + "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}, "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} }, @@ -26,20 +26,20 @@ {}, { "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"} + "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://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"}, + "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://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"} + "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} }, { - "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us05web.zoom.us/j/81227675458?pwd=SWFuQTZLY2w5a2dMMjd0cTdxSUN6dz09"}, + "10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, "12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}, "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} }, From 5af49c914709bea0029ece5219b357673bb14f8e Mon Sep 17 00:00:00 2001 From: dymik739 Date: Tue, 21 Mar 2023 16:36:35 +0200 Subject: [PATCH 15/23] auto-schedule-pro: enable link by default when listing schedule [community suggestion] --- modules/auto-schedule-pro/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/auto-schedule-pro/index.py b/modules/auto-schedule-pro/index.py index cbd5c39..5950cce 100644 --- a/modules/auto-schedule-pro/index.py +++ b/modules/auto-schedule-pro/index.py @@ -156,7 +156,7 @@ if self.MESSAGE["text"].lower().split()[0] == "!пари": full_schedule = dict(list(schedule.items()) + list(additions.items())) - preferences = {"name": True, "date": True, "teacher": True, "link": False} + preferences = {"name": True, "date": True, "teacher": True, "link": True} selected_day = current_week*7 + current_day if len(command) >= 2 and len(command[1]) > 0: From f213710601c6506e73e238127e5b48bc2a9537e3 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Thu, 6 Apr 2023 08:11:02 +0300 Subject: [PATCH 16/23] add testing code for web service --- modules/auto-schedule-pro/www/index.py | 111 +++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 modules/auto-schedule-pro/www/index.py diff --git a/modules/auto-schedule-pro/www/index.py b/modules/auto-schedule-pro/www/index.py new file mode 100644 index 0000000..1b73208 --- /dev/null +++ b/modules/auto-schedule-pro/www/index.py @@ -0,0 +1,111 @@ +import datetime +import json + +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( open("../schedule.json").read() ) +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( open("../additions.json").read() ) +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) + dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400) + 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") + + human_readable_date += "з " + + #print("test3.1.3") + human_readable_date += dt_pair.strftime("%H:%M") + #print("test3.1.4") + + human_readable_date += " до " + human_readable_date += dt_pair_finish.strftime("%H:%M") + + #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) + #print("test3.1.5") + + print(f"Location: {p['link']}\n\n") + else: + self.RESPONCE = "Пар немає взагалі. Ми вільні!" + +else: + #print("test3.2") + actual_pair_ts = reference_time + next_pair_time + dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts) + dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400) + + 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 += "сьогодні " + + human_readable_date += "з " + human_readable_date += dt_pair.strftime("%H:%M") + + human_readable_date += " до " + human_readable_date += dt_pair_finish.strftime("%H:%M") + + #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) + + print(f"Location: {p['link']}\n\n") From c9271963b24f8ac8796e172abecdd45e3d175a16 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Thu, 6 Apr 2023 08:20:18 +0300 Subject: [PATCH 17/23] main.py: [community suggestion] disable link previews when sending messages --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 2e099d8..f6bac81 100644 --- a/main.py +++ b/main.py @@ -180,7 +180,7 @@ def queue_processor(): if mod.version == 1: responce = mod.process(msg) if len(responce) > 0: - updater.bot.send_message(chat_id = msg.chat.id, text = responce) + updater.bot.send_message(chat_id = msg.chat.id, text = responce, disable_web_page_preview = True) print("Responded using module {} ({}) with text: {}".format(mod.path, mod.alias, responce)) break From 29a86f7320e7f714f77e9f5458a3944fed6ffe1a Mon Sep 17 00:00:00 2001 From: dymik739 Date: Fri, 7 Apr 2023 00:19:39 +0300 Subject: [PATCH 18/23] transliteration-decoder: add new module --- modules/transliteration-decoder/index.py | 18 ++++++++++ modules/transliteration-decoder/meta.json | 6 ++++ .../translate_models.json | 35 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 modules/transliteration-decoder/index.py create mode 100644 modules/transliteration-decoder/meta.json create mode 100644 modules/transliteration-decoder/translate_models.json diff --git a/modules/transliteration-decoder/index.py b/modules/transliteration-decoder/index.py new file mode 100644 index 0000000..b35f0d1 --- /dev/null +++ b/modules/transliteration-decoder/index.py @@ -0,0 +1,18 @@ +if self.MESSAGE['text'].split()[0] == "!decode" and len(self.MESSAGE['text'].split(" ", 2)) == 3: + try: + models = json.loads(readfile(self.path + "translate_models.json")) + chosen_model = self.MESSAGE['text'].split(" ", 2)[1] + + t = self.MESSAGE['text'].split(" ", 2)[2] + + translated_t = t + if chosen_model not in models: + self.RESPONCE = f"Такого варіанту транслітерації не існує. Доступні варіанти: {', '.join(list(models.keys()))}" + else: + for i in models[chosen_model]: + translated_t = translated_t.replace(i[0], i[1]) + translated_t = translated_t.replace(i[0].upper(), i[1].upper()) + + self.RESPONCE = f"Результат: {translated_t}" + except Exception as e: + print(f"[translit-decoder] Got exception: {e}") diff --git a/modules/transliteration-decoder/meta.json b/modules/transliteration-decoder/meta.json new file mode 100644 index 0000000..4bcbdeb --- /dev/null +++ b/modules/transliteration-decoder/meta.json @@ -0,0 +1,6 @@ +{ + "version": 1, + "index_file": "index.py", + "start_on_boot": true, + "alias": "translit-decoder" +} diff --git a/modules/transliteration-decoder/translate_models.json b/modules/transliteration-decoder/translate_models.json new file mode 100644 index 0000000..bb2ca30 --- /dev/null +++ b/modules/transliteration-decoder/translate_models.json @@ -0,0 +1,35 @@ +{ + "cz-ua": [ + ["šč", "щ"], + ["ja", "я"], + ["ju", "ю"], + ["ji", "ї"], + ["je", "є"], + ["f", "ф"], + ["b", "б"], + ["ž", "ж"], + ["q", "к"], + ["š", "ш"], + ["n", "н"], + ["p", "п"], + ["r", "р"], + ["s", "с"], + ["t", "т"], + ["h", "х"], + ["č", "ч"], + ["'", "ь"], + ["y", "и"], + ["z", "з"], + ["l", "л"], + ["k", "к"], + ["d", "д"], + ["u", "у"], + ["m", "м"], + ["v", "в"], + ["j", "й"], + ["s", "с"], + ["a", "а"], + ["i", "і"], + ["g", "г"] + ] +} From 2f004fec7dac9bab0bb1cf4396aaa0307cf4760a Mon Sep 17 00:00:00 2001 From: dymik739 Date: Mon, 10 Apr 2023 15:26:50 +0300 Subject: [PATCH 19/23] auto-schedule-pro: fix redirection fail when more than one link provided by the schedule --- modules/auto-schedule-pro/www/index.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/auto-schedule-pro/www/index.py b/modules/auto-schedule-pro/www/index.py index 1b73208..6334373 100644 --- a/modules/auto-schedule-pro/www/index.py +++ b/modules/auto-schedule-pro/www/index.py @@ -80,7 +80,7 @@ if next_pair_time == None: #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) #print("test3.1.5") - print(f"Location: {p['link']}\n\n") + print(f"Location: {p['link'].split()[0]}\n\n") else: self.RESPONCE = "Пар немає взагалі. Ми вільні!" @@ -108,4 +108,4 @@ else: #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) - print(f"Location: {p['link']}\n\n") + print(f"Location: {p['link'].split()[0]}\n\n") From b3a44bcc0c01251b8536930c54bba506bcab34ba Mon Sep 17 00:00:00 2001 From: dymik739 Date: Mon, 10 Apr 2023 17:30:50 +0300 Subject: [PATCH 20/23] auto-schedule-pro: add the ability to read dynamic links from containers [experimental feature] --- modules/auto-schedule-pro/schedule.json | 8 +-- modules/auto-schedule-pro/www/index.py | 68 ++++++++++++++++++++++--- 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/modules/auto-schedule-pro/schedule.json b/modules/auto-schedule-pro/schedule.json index 62ee37f..e7bb0cc 100644 --- a/modules/auto-schedule-pro/schedule.json +++ b/modules/auto-schedule-pro/schedule.json @@ -14,11 +14,11 @@ }, { "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"} }, { - "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"}, "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"}, - "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"} }, { - "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"}, "14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"} }, diff --git a/modules/auto-schedule-pro/www/index.py b/modules/auto-schedule-pro/www/index.py index 6334373..af0a50c 100644 --- a/modules/auto-schedule-pro/www/index.py +++ b/modules/auto-schedule-pro/www/index.py @@ -1,5 +1,6 @@ import datetime import json +import os current_time = datetime.datetime.now() @@ -48,14 +49,15 @@ for i in key_list: 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) - dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400) + + #actual_pair_ts = reference_time + min(full_schedule.keys()) + #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())] #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 += "завтра " @@ -76,16 +78,42 @@ if next_pair_time == None: human_readable_date += " до " human_readable_date += dt_pair_finish.strftime("%H:%M") + ''' #self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) #print("test3.1.5") + 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

{random.choice(surprise_pool)}


Посилання на пару {p['name']}, яке зберігається у сховищі, було отримане більш ніж 12 годин тому (рівно {time.time() - cont['update_ts']} секунд тому), тому, скоріш за все, не є дійсним.

На жаль, нового посилання ще не надходило, тому Ви можете або чекати на нього і оновлювати цю сторінку (перенаправлення станеться, щойно з'явиться нове посилання), або перейти вручну за старим посиланням (не рекомендується):

{cont['link']}

PS: щоб обійти цю сторінку та завжди автоматично переходити за будь-яким наявним посиланням, можна додати у рядок URL в кінці напис: ?force

") + 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

{random.choice(surprise_pool)}


Під час спроби отримання посилання на пару {p['name']} сталася непередбачена помилка. Ви можете оновлювати сторінку, поки проблема не зникне (перенаправлення відбудеться, щойно все запрацює), або пошукати посилання де-інде.

Вибачте за тимчасові незручності(

") + + else: + print(f"Location: {p['link'].split()[0]}\n\n", end = '') - print(f"Location: {p['link'].split()[0]}\n\n") else: - self.RESPONCE = "Пар немає взагалі. Ми вільні!" + #self.RESPONCE = "Пар немає взагалі. Ми вільні!" + pass else: #print("test3.2") + ''' actual_pair_ts = reference_time + next_pair_time dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts) dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400) @@ -105,7 +133,33 @@ else: human_readable_date += " до " human_readable_date += dt_pair_finish.strftime("%H:%M") + ''' #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

{random.choice(surprise_pool)}


Посилання на пару {p['name']}, яке зберігається у сховищі, було отримане більш ніж 12 годин тому (рівно {time.time() - cont['update_ts']} секунд тому), тому, скоріш за все, не є дійсним.

На жаль, нового посилання ще не надходило, тому Ви можете або чекати на нього і оновлювати цю сторінку (перенаправлення станеться, щойно з'явиться нове посилання), або перейти вручну за старим посиланням (не рекомендується):

{cont['link']}

PS: щоб обійти цю сторінку та завжди автоматично переходити за будь-яким наявним посиланням, можна додати у рядок URL в кінці напис: ?force

") + 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

{random.choice(surprise_pool)}


Під час спроби отримання посилання на пару {p['name']} сталася непередбачена помилка. Ви можете оновлювати сторінку, поки проблема не зникне (перенаправлення відбудеться, щойно все запрацює), або пошукати посилання де-інде.

Вибачте за тимчасові незручності(

") + + else: + print(f"Location: {p['link'].split()[0]}\n\n", end = '') + + #print(f"Location: {p['link'].split()[0]}\n\n") From dc656e21564d700a071e7da7fdfe2379740623c2 Mon Sep 17 00:00:00 2001 From: dymik739 Date: Mon, 10 Apr 2023 17:40:35 +0300 Subject: [PATCH 21/23] auto-schedule-pro: update additions.json --- modules/auto-schedule-pro/additions.json | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/auto-schedule-pro/additions.json b/modules/auto-schedule-pro/additions.json index f253ddf..e71bbb4 100644 --- a/modules/auto-schedule-pro/additions.json +++ b/modules/auto-schedule-pro/additions.json @@ -1,5 +1,6 @@ [ { + "12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Кушлаба М. П.", "link": "https://bbb.comsys.kpi.ua/b/myk-0iw-red-p01"} }, { }, From 0def45c6ce8670696a3755956cadc5bb4a65b8fb Mon Sep 17 00:00:00 2001 From: dymik739 Date: Mon, 10 Apr 2023 17:50:20 +0300 Subject: [PATCH 22/23] transliteration-decoder: add the ability to read the reply_to message text as decoding argument --- modules/transliteration-decoder/index.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/transliteration-decoder/index.py b/modules/transliteration-decoder/index.py index b35f0d1..8b291aa 100644 --- a/modules/transliteration-decoder/index.py +++ b/modules/transliteration-decoder/index.py @@ -1,10 +1,13 @@ -if self.MESSAGE['text'].split()[0] == "!decode" and len(self.MESSAGE['text'].split(" ", 2)) == 3: +if self.MESSAGE['text'].split()[0] == "!decode" and (2 <= len(self.MESSAGE['text'].split(" ", 2)) <= 3): try: models = json.loads(readfile(self.path + "translate_models.json")) chosen_model = self.MESSAGE['text'].split(" ", 2)[1] - t = self.MESSAGE['text'].split(" ", 2)[2] - + if len(self.MESSAGE['text'].split(" ", 2)) == 3: + t = self.MESSAGE['text'].split(" ", 2)[2] + elif len(self.MESSAGE['text'].split(" ", 2)) == 2: + t = self.MESSAGE['reply_to_message']['text'] + translated_t = t if chosen_model not in models: self.RESPONCE = f"Такого варіанту транслітерації не існує. Доступні варіанти: {', '.join(list(models.keys()))}" @@ -12,7 +15,7 @@ if self.MESSAGE['text'].split()[0] == "!decode" and len(self.MESSAGE['text'].spl for i in models[chosen_model]: translated_t = translated_t.replace(i[0], i[1]) translated_t = translated_t.replace(i[0].upper(), i[1].upper()) - + self.RESPONCE = f"Результат: {translated_t}" except Exception as e: print(f"[translit-decoder] Got exception: {e}") From d0f2827d66b8a127ecc18252f615301fee0cffdb Mon Sep 17 00:00:00 2001 From: dymik739 Date: Mon, 17 Apr 2023 22:11:49 +0300 Subject: [PATCH 23/23] transliteration-decoder: improve case-awareness to produce more precise translations --- modules/transliteration-decoder/index.py | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/transliteration-decoder/index.py b/modules/transliteration-decoder/index.py index 8b291aa..cd955c1 100644 --- a/modules/transliteration-decoder/index.py +++ b/modules/transliteration-decoder/index.py @@ -14,6 +14,7 @@ if self.MESSAGE['text'].split()[0] == "!decode" and (2 <= len(self.MESSAGE['text else: for i in models[chosen_model]: translated_t = translated_t.replace(i[0], i[1]) + translated_t = translated_t.replace(i[0].capitalize(), i[1].capitalize()) translated_t = translated_t.replace(i[0].upper(), i[1].upper()) self.RESPONCE = f"Результат: {translated_t}"