Compare commits

..

95 Commits

Author SHA1 Message Date
dymik739 fa8f3ebdf5 auto-schedule-pro-v2: add schedule.kpi.ua to schedule-v2 converter 2025-08-29 21:16:17 +03:00
dymik739 982eb7208a auto-schedule-pro-v2: bump schedule file versions for 7 semester 2025-08-29 21:15:45 +03:00
dymik739 22c441c630 generic-command-processor: update entries for 7 semester 2025-08-29 21:14:38 +03:00
dymik739 cb3bf7c14f auto-schedule-pro-v2: update easter egg for semester 7 2025-08-12 14:30:59 +03:00
dymik739 c0a4474d26 [transliteration-decoder] add new ua-en-direct model 2025-08-04 21:09:19 +03:00
dymik739 309b9b114c auto-schedule-pro-v2: update schedule files 2025-06-05 14:40:13 +03:00
dymik739 8810d97e4c auto-schedule-pro-v2: add progress bar display for current lesson 2025-01-29 22:23:36 +02:00
dymik739 48a106ce69 fix wrong comment writing and wrong week detection 2025-01-29 21:07:08 +02:00
dymik739 be7197a999 auto-schedule-pro-v2: update term5 schedule 2024-08-30 15:22:07 +03:00
dymik739 6640bfaee8 troll-spelling-corrector: disable module on boot 2024-08-28 18:38:37 +03:00
dymik739 3554e2ac48 auto-schedule-pro-v2: update schedule for term5 2024-08-16 17:27:41 +03:00
dymik739 d4cd31818f generic-command-processor: add link for official 2024-2025 year schedule 2024-08-16 16:53:20 +03:00
dymik739 25457132fb generic-command-processor: updated links for term5 2024-08-14 19:32:49 +03:00
dymik739 c881d54a4e auto-schedule-pro-v2: add short lesson listing format to improve readability 2024-08-14 15:02:51 +03:00
dymik739 c283414fe3 auto-schedule-pro-v2: update schedule for term 5 2024-08-14 14:59:17 +03:00
dymik739 d4710eb994 auto-schedule-pro-v2: clean up some remnants from the past 2024-08-14 14:57:12 +03:00
dymik739 86e4900dad generic-command-processor: added light easter egg 2024-06-24 08:43:40 +03:00
dymik739 518b022e2b auto-schedule-pro-v2: updated schedule for term4 exams 2024-06-17 09:35:06 +03:00
dymik739 9d2ecab090 auto-schedule-pro-v2: update schedule for term4 exams 2024-06-09 20:14:44 +03:00
dymik739 b02cee4fdb troll-spelling-corrector: improve the detection and correction algorithms in the most horrendous way 2024-04-06 23:27:13 +03:00
dymik739 14ab2d3038 troll-spelling-corrector: add missing locative case from the match dictionary 2024-04-06 18:28:34 +03:00
dymik739 0005bb3bdb troll-spelling-corrector: improve word detection accuracy by using a predefined dictionary 2024-04-06 18:14:53 +03:00
dymik739 4ac6261fd5 qna-basic: update easter egg to work with faculty rebranding (fict -> fice) 2024-04-06 17:41:40 +03:00
dymik739 3a3f76d4d7 generic-command-processor: update iltimate link, add short help and add another easter egg 2024-04-06 17:40:44 +03:00
dymik739 97588b32af auto-schedule-pro-v2: update schedule for term 4 2024-04-06 17:39:19 +03:00
dymik739 c0e72a5ca0 auto-schedule-pro-v2: add support for reading comments from schedule-v2 file format 2024-04-06 17:38:28 +03:00
dymik739 f6859cd748 auto-schedule-pro-v2: update for term 4 and add support for alternative commands 2024-02-10 18:37:54 +02:00
dymik739 b546d2c8d2 auto-schedule-pro-v2: reorganize schedule storage 2024-02-10 18:36:44 +02:00
dymik739 9561075e2e generic-command-processor: add help command and recordings shortcut 2024-02-10 18:35:22 +02:00
dymik739 e80b5c1c22 auto-schedule-pro-v2: update term3 exam schedule 2024-01-17 20:03:29 +02:00
dymik739 74c05c8290 auto-schedule-pro-v2: update schedule for exams (term 3 ending) 2024-01-14 20:10:30 +02:00
dymik739 99a8da384f generic-command-processor: add shortcuts for year schedule and discipline layout images 2024-01-14 20:09:12 +02:00
dymik739 8576e7afe7 generic-command-processor: add fiot_free_vidrahuvannja easter egg 2023-12-26 21:15:48 +02:00
dymik739 a75a33826d core: improve verbosity and allow execution of control commands in any chat 2023-11-27 13:36:57 +02:00
dymik739 a62f38ec2f update schedule 2023-11-18 19:06:31 +02:00
dymik739 f2bddd3690 qna-basic: add easter egg triggered by the FFS request 2023-11-18 19:05:08 +02:00
dymik739 b049f0a152 add module: shuffle (allows to shuffle message text in various ways) 2023-11-12 11:08:19 +02:00
dymik739 1d22a31418 generic-command-processor: add command to get the ultimate link v2 2023-11-12 11:07:06 +02:00
dymik739 12b74d54fb Merge branch 'master' of http://10.1.1.1:3000/dymik739/modular-bot-framework-for-telegram 2023-11-09 13:34:14 +02:00
dymik739 29602f2adf Merge pull request 'Added very important spelling correction module' (#12) from Misha1tigr/modular-bot-framework-for-telegram:master into master
Merging as a truly magnificent, state-of-art spelling check system that greatly improves not only the mere grammar, but the perception of this field in it's entirety.
Reviewed-on: #12
2023-11-09 13:33:21 +02:00
Misha1tigr 08672bdbbe Added very important spelling correction module 2023-11-09 12:49:10 +02:00
dymik739 f1f69b4395 auto-schedule-pro-v2: add support for updated schedule v2 "consulting" lesson type 2023-11-06 18:39:31 +02:00
dymik739 56c45d1beb core: cleanup codebase, move to f-string formatting 2023-11-06 18:37:23 +02:00
dymik739 11acdb6fd4 generic-command-processor: add an easter egg for requesting the server link 2023-11-06 18:15:46 +02:00
dymik739 e830bae282 add new module: help (allows to get manual pages for commands) 2023-11-04 13:48:40 +02:00
dymik739 2a9bd28d65 add new module: tag-sub (allows to subscribe to events and get tagged once they happen) 2023-11-04 13:48:23 +02:00
dymik739 2b8105d2a8 core: log responses to stdout first, then send as a Telegram message 2023-11-04 13:17:22 +02:00
dymik739 a7bbb1c1cc core: harden message processing by catching wrong returns from v2 modules 2023-11-03 17:54:35 +02:00
dymik739 e002dc46a2 update schedule 2023-10-30 10:07:23 +02:00
dymik739 51307b5234 transliteration-decoder: implement proper HTML escaping and add new transliteration model 2023-10-29 21:13:48 +02:00
dymik739 ec22c72afb core: harden the handling of received messages 2023-10-29 20:56:55 +02:00
dymik739 79a307a7b5 core: add control option to check the message queue length 2023-10-10 00:15:21 +03:00
dymik739 3e38c113d9 pingtools: fix leaderboard sorting 2023-10-09 23:48:08 +03:00
dymik739 7d0d816ca8 generic-command-processor: add easter eggs and make the module case-insensitive 2023-10-09 23:10:03 +03:00
dymik739 376ffd4957 core: add control commands for enabling and disabling modules on the fly 2023-10-03 16:57:49 +03:00
dymik739 a530272408 add new module: generic-command-processor 2023-10-01 22:34:39 +03:00
dymik739 807dee5af1 core: prioritize processing commands over processing all other messages 2023-09-27 08:27:38 +03:00
dymik739 f591c8d54a core: implement adaptive delays during message processing and improve the control panel 2023-09-26 13:00:17 +03:00
dymik739 48e672a7b0 pingtools: add the ping-pong minigame 2023-09-26 12:58:40 +03:00
dymik739 b5a37acecb add new module: pingtools 2023-09-21 19:32:56 +03:00
dymik739 187d990d2b translator: update translating server URL 2023-09-21 19:30:18 +03:00
dymik739 151107aa81 core: fix response dropping when formatting is returned as an empty string 2023-09-21 19:29:53 +03:00
dymik739 2446a20a5b update schedule 2023-09-19 18:52:54 +03:00
dymik739 4502e7fbe1 Merge pull request 'transliteration-decoder: add automatic photo caption detection and let bot core deal with exceptions' (#11) from dev into master
Reviewed-on: #11
2023-09-19 18:22:50 +03:00
dymik739 09def1cd63 transliteration-decoder: add automatic photo caption detection and let bot core deal with exceptions 2023-09-19 18:20:31 +03:00
dymik739 34439e944b update schedule 2023-09-12 12:36:54 +03:00
dymik739 dc8056abed Merge pull request 'Merge updates from dev branch to master' (#10) from dev into master
Reviewed-on: #10
2023-09-12 12:32:45 +03:00
dymik739 604054af9e auto-schedule-pro-v2: add lookup capability to current lesson requests and make styling more flexible 2023-09-12 12:24:33 +03:00
dymik739 d6bd061090 auto-schedule-pro-v2: in schedule lookup set date to be always on top even if the lesson is single 2023-09-12 11:44:03 +03:00
dymik739 e57773ccbb auto-schedule-pro-v2: hotfixes and add "default" label next to auto-generated values 2023-09-12 10:04:00 +03:00
dymik739 05a8039b18 auto-schedule-pro-v2: add clear option to remove custom setting value and clean up old code remnants 2023-09-12 09:52:38 +03:00
dymik739 a22fb2b4b1 auto-schedule-pro-v2: hotfixing many issues at once to make the module work properly 2023-09-11 22:29:52 +03:00
dymik739 1381ddb007 auto-schedule-pro-v2: implement templates support for custom output theming 2023-09-11 21:36:24 +03:00
dymik739 9bdf8d0775 update schedule 2023-09-09 15:15:30 +03:00
dymik739 e9bec0159f auto-schedule-pro-v2: change spacing between schedule lookup parts 2023-09-06 17:39:58 +03:00
dymik739 5dc78b8cb0 auto-schedule-pro-v2: fix HTML escaping 2023-09-06 17:36:18 +03:00
dymik739 67b3c4278b auto-schedule-pro-v2: fix date showing up twice during schedule lookup 2023-09-06 17:33:12 +03:00
dymik739 0497cbf9b7 add support for parse_mode selection in all module APIs and update modules to respect these changes 2023-09-06 17:22:26 +03:00
dymik739 34f9b83a95 update schedule.json 2023-09-06 17:16:40 +03:00
dymik739 87928df3f7 update schedule.json 2023-09-06 12:25:38 +03:00
dymik739 2b9ac41ced improve error reporting system, switch to schedule-v2 format in auto-schedule-pro-v2 2023-09-05 20:40:57 +03:00
dymik739 baf815e74d update schedule 2023-09-05 20:14:18 +03:00
dymik739 fc450f633e update .gitignore to not track __pycache__ folders 2023-09-05 19:22:49 +03:00
dymik739 1070362bc6 auto-schedule-pro-v2: prepare for migration from schedule-v1 to schedule-v2 format 2023-09-05 19:13:52 +03:00
dymik739 d2915c10e2 auto-schedule-pro: update schedule.json 2023-09-05 19:07:45 +03:00
dymik739 ebdae6256e main.py: disable MarkdownV2 to avoid errors 2023-09-05 13:22:11 +03:00
dymik739 8cc68080e8 auto-schedule-pro: update schedule.json 2023-09-05 13:17:15 +03:00
dymik739 94275048bb auto-schedule-pro: updated schedule.json 2023-09-05 11:47:34 +03:00
dymik739 1504e03e13 main.py: added temporary fix for MarkdownV2 support 2023-09-05 11:46:59 +03:00
dymik739 87424c8786 transliteration-decoder: add support for MarkdownV2 2023-09-04 21:36:13 +03:00
dymik739 b21b16b817 auto-schedule-pro-v2: add initial support for MarkdownV2 2023-09-04 21:34:33 +03:00
dymik739 12ee02cee0 main.py: enable MarkdownV2 formatting 2023-09-04 21:33:23 +03:00
dymik739 ba353a3609 auto-schedule-pro: update schedule.json 2023-09-03 07:56:45 +03:00
dymik739 69cb179d87 auto-schedule-pro: update schedule for 3 semester 2023-08-08 18:18:46 +03:00
dymik739 1bd7fc2ef1 auto-schedule-pro-v2: improve holiday exclusive easter egg (triggered at !пара) 2023-08-07 23:32:45 +03:00
62 changed files with 4467 additions and 141 deletions
+2
View File
@@ -1,2 +1,4 @@
config/*
modules/irc-bridge/error.log
__pycache__/
modules/auto-schedule-pro-v2/preference-db
+168 -36
View File
@@ -7,10 +7,16 @@ import sys
import os
import threading
import importlib
import traceback
# global variables
STOP_REQUESTED = False
DEBUG_MODE = False
DELAY_AFTER_RESPONSE = 3
DELAY_AFTER_MESSAGE = 0.1
DELAY_AFTER_IDLE = 1.0
lock = threading.Lock()
# some functions that increase readability of the code
def readfile(filename):
@@ -39,9 +45,12 @@ class ModuleV1:
# set environmental variables
def set_env(self):
self.RESPONSE = ""
self.FORMAT = ""
def set_predefine(self):
try:
if DEBUG_MODE:
print(f"Predefine on module v1 {self.alias} ({self.path})")
exec(self.predefine)
except Exception as e:
print(f"[ERROR] module v1: module \"{self.path}\" ({self.alias}) raised exception \"{e}\" "
@@ -53,11 +62,14 @@ class ModuleV1:
self.MESSAGE = msg
try:
if DEBUG_MODE:
print(f"Calling module v1 {self.alias} ({self.path})")
exec(self.code)
return self.RESPONSE
return self.RESPONSE, self.FORMAT
except Exception as e:
print(f"[ERROR] module v1: module \"{self.path}\" ({self.alias}) raised exception \"{e}\"")
return ""
print(f"[ERROR] module v1: traceback:\n{traceback.format_exc()}")
return "", None
class ModuleV2:
@@ -72,10 +84,13 @@ class ModuleV2:
# running the module
def process(self, msg):
try:
if DEBUG_MODE:
print(f"Calling module v2 {self.alias} ({self.path})")
return self.obj.process(msg, self.path)
except Exception as e:
print(f"[ERROR] module v2: module \"{self.path}\" ({self.alias}) raised exception \"{e}\"")
return None
print(f"[ERROR] module v2: traceback:\ntraceback.format_exc()")
return None, None
# module control unit
@@ -89,7 +104,7 @@ class ModuleControlUnit:
def reload_modules(self):
for folder in os.listdir("modules/"):
try:
meta_raw = readfile("modules/{}/meta.json".format(folder))
meta_raw = readfile(f"modules/{folder}/meta.json")
if not meta_raw:
print(f"[WARN] module_loader: no meta.json found in module folder \"{folder}\"")
continue
@@ -102,9 +117,9 @@ class ModuleControlUnit:
else:
index_file = "index.py"
code = readfile( "modules/{}/{}".format(folder, index_file) )
code = readfile(f"modules/{folder}/{index_file}")
if not code: # False both when readfile() returns False and when the code string is empty
print("[WARN] reload_modules: module {} does not have any code, skipping...".format(folder))
print(f"[WARN] reload_modules: module {folder} does not have any code, skipping...")
continue
if "start_on_boot" in meta:
@@ -118,7 +133,7 @@ class ModuleControlUnit:
alias = None
if "predefine" in meta:
predefine = readfile("modules/{}/{}".format(folder, meta["predefine"]))
predefine = readfile(f"modules/{folder}/{meta['predefine']}")
else:
predefine = False
@@ -162,63 +177,180 @@ def queue_processor():
try:
if len(message_queue) > 0:
msg = message_queue[0]
print("[DEBUG] queue_processor: {}".format(msg)) # debug
del message_queue[0]
print(f"[DEBUG] queue_processor: {msg}") # debug
# check for control commands
if msg["chat"]["id"] == 575246355:
if msg.from_user.id == 575246355:
if msg["text"][0] == "$":
command = msg["text"][1:].split(" ")
command = msg["text"][1:].split()
if len(command) >= 2 and command[0] == "module":
if command[1] == "reload":
print("[INFO] Module reloading triggered by a command")
if len(command) == 2:
print("[INFO] Full module reloading triggered by a command")
updater.bot.send_message(msg.chat.id, f"Reloading all modules...")
# properly reload all v2 modules
for mod in mcu.modules:
if mod.version == 2:
importlib.reload(mod.obj)
# properly reload all v2 modules
for mod in mcu.modules:
if mod.version == 2:
importlib.reload(mod.obj)
del mcu.modules[:]
mcu.reload_modules()
del mcu.modules[:]
mcu.reload_modules()
else:
# TO DO: make it possible to reload individual modules by their
# alias or containing folder
pass
elif command[1] == "enable" and len(command) == 3:
if command[2] == "all":
for mod in mcu.modules:
mod.enabled = True
print(f"[INFO] module {mod.alias} was enabled")
else:
for mod in mcu.modules:
if mod.alias == command[2]:
mod.enabled = True
print(f"[INFO] module {mod.alias} was enabled")
elif command[1] == "disable" and len(command) == 3:
if command[2] == "all":
for mod in mcu.modules:
mod.enabled = False
print(f"[INFO] module {mod.alias} was disabled")
else:
for mod in mcu.modules:
if mod.alias == command[2]:
mod.enabled = False
print(f"[INFO] module {mod.alias} was disabled")
elif command[1] == "status" and len(command) == 3:
if command[2] == "all":
for mod in mcu.modules:
print(f"[INFO] module {mod.alias} is {mod.enabled}")
else:
for mod in mcu.modules:
if mod.alias == command[2]:
print(f"[INFO] module {mod.alias} is {mod.enabled}")
elif (2 <= len(command) <= 3) and command[0] == "delay":
l = len(command)
if command[1] == "response":
if l == 3:
try:
new_value = float(command[2])
global DELAY_AFTER_RESPONSE
DELAY_AFTER_RESPONSE = new_value
print(f"[INFO]: Set DELAY_AFTER_RESPONSE to {command[2]}")
updater.bot.send_message(msg.chat.id, f"Set DELAY_AFTER_RESPONSE to {command[2]}")
except:
print(f"[WARN]: Cannot set DELAY_AFTER_RESPONSE to non-float value of {command[2]}")
updater.bot.send_message(msg.chat.id, f"[WARN]: Cannot set DELAY_AFTER_RESPONSE to non-float value of {command[2]}")
elif l == 2:
print(f"[INFO]: DELAY_AFTER_RESPONSE = {DELAY_AFTER_RESPONSE}")
updater.bot.send_message(msg.chat.id, f"[INFO]: DELAY_AFTER_RESPONSE = {DELAY_AFTER_RESPONSE}")
elif command[1] == "message":
if l == 3:
try:
new_value = float(command[2])
global DELAY_AFTER_MESSAGE
DELAY_AFTER_MESSAGE = new_value
print(f"[INFO]: Set DELAY_AFTER_MESSAGE to {command[2]}")
updater.bot.send_message(msg.chat.id, f"Set DELAY_AFTER_MESSAGE to {command[2]}")
except:
print("[WARN]: Cannot set DELAY_AFTER_MESSAGE to non-float value of {command[2]}")
updater.bot.send_message(msg.chat.id, f"[WARN]: Cannot set DELAY_AFTER_MESSAGE to non-float value of {command[2]}")
elif l == 2:
print(f"[INFO]: DELAY_AFTER_MESSAGE = {DELAY_AFTER_MESSAGE}")
updater.bot.send_message(msg.chat.id, f"[INFO]: DELAY_AFTER_MESSAGE = {DELAY_AFTER_MESSAGE}")
elif command[1] == "idle":
if l == 3:
try:
new_value = float(command[2])
global DELAY_AFTER_IDLE
DELAY_AFTER_IDLE = new_value
print(f"[INFO]: Set DELAY_AFTER_IDLE to {command[2]}")
updater.bot.send_message(msg.chat.id, f"Set DELAY_AFTER_IDLE to {command[2]}")
except:
print("[WARN]: Cannot set DELAY_AFTER_IDLE to non-float value of {command[2]}")
updater.bot.send_message(msg.chat.id, f"[WARN]: Cannot set DELAY_AFTER_IDLE to non-float value of {command[2]}")
elif l == 2:
print(f"[INFO]: DELAY_AFTER_IDLE = {DELAY_AFTER_IDLE}")
updater.bot.send_message(msg.chat.id, f"[INFO]: DELAY_AFTER_IDLE = {DELAY_AFTER_IDLE}")
elif len(command) == 2 and command[0] == "queue":
if command[1] == "size":
print(f"[INFO]: Queue length is {len(message_queue)}")
updater.bot.send_message(msg.chat.id, f"[INFO]: Queue length is {len(message_queue)}")
elif len(command) == 2 and command[0] == "debug":
global DEBUG_MODE
if command[1] == "on":
print("[INFO] Debug mode is enabled")
DEBUG_MODE = True
else:
print("[INFO] Debug mode is disabled")
DEBUG_MODE = False
del message_queue[0]
continue
# modules are used in here
for mod in mcu.modules:
if mod.enabled:
if mod.version == 1 or mod.version == 2:
response = mod.process(msg)
if mod.version in [1, 2]:
try:
response, formatting = mod.process(msg)
except Exception as e:
print(f"Module {mod.alias} ({mod.path}) failed to do a proper return, skipping...")
continue
if response:
updater.bot.send_message(chat_id=msg.chat.id, text=response,
disable_web_page_preview=True)
print(f"Responded using module {mod.path} ({mod.alias}) with text: {responce}")
break
if not formatting:
print(f"Responding using module {mod.path} ({mod.alias}) with text: {response}")
updater.bot.send_message(chat_id=msg.chat.id, text=response,
disable_web_page_preview=True)
time.sleep(DELAY_AFTER_RESPONSE)
break
del message_queue[0]
elif formatting in ["Markdown", "MarkdownV2", "HTML"]:
print(f"Responding using module {mod.path} ({mod.alias}) with text (using {formatting}): {response}")
updater.bot.send_message(chat_id=msg.chat.id, text=response,
disable_web_page_preview=True,
parse_mode=formatting)
time.sleep(DELAY_AFTER_RESPONSE)
break
time.sleep(0.1)
time.sleep(DELAY_AFTER_MESSAGE)
else:
if STOP_REQUESTED:
break
else:
time.sleep(1)
except Exception:
time.sleep(DELAY_AFTER_IDLE)
except Exception as e:
print(f"[ERROR] queue_processor: current message queue: {message_queue}")
print("[ERROR] queue_processor: error while processing message, trying to delete it...")
try:
del message_queue[0]
print("[INFO] queue_processor: deleted broken message from the queue")
except:
print("[WARN] queue_processor: message seems absent, whatever")
print(f"[ERROR] Traceback:\n{traceback.format_exc()}")
print(f"[ERROR] queue_processor: error while processing message ({e})...")
print("[INFO] queue_processor: skipped broken message")
print("[INFO] queue_processor thread stops successfully")
# telegram bot processor
def message_handler(update, context):
print("[DEBUG] Received new message") # just for testing
message_queue.append(update.message)
global lock
with lock:
if update.message and update.message.text.__class__ == str and update.message.text.startswith("$"):
print("[DEBUG] Received new message with high priority") # just for testing
message_queue.insert(0, update.message)
elif update.message:
print("[DEBUG] Received new message") # just for testing
message_queue.append(update.message)
else:
print(f"[DEBUG] Received {update.message} instead of a message")
# --- Final stage ---
+18 -9
View File
@@ -6,6 +6,7 @@ import sys
import os
import threading
import importlib
import traceback
from telegram import Message, Chat
@@ -40,6 +41,7 @@ class ModuleV1:
# set environmental variables
def set_env(self):
self.RESPONSE = ""
self.FORMAT = ""
def set_predefine(self):
try:
@@ -55,10 +57,11 @@ class ModuleV1:
self.MESSAGE = msg
try:
exec(self.code)
return self.RESPONSE
return self.RESPONSE, self.FORMAT
except Exception as e:
print(f"[ERROR] module v1: module \"{self.path}\" ({self.alias}) raised exception \"{e}\"")
return ""
print(f"[ERROR] module v1: traceback:\n{traceback.format_exc()}")
return "", None
class ModuleV2:
@@ -73,11 +76,11 @@ class ModuleV2:
# running the module
def process(self, msg):
try:
responce = self.obj.process(msg, self.path)
return responce
return self.obj.process(msg, self.path)
except Exception as e:
print(f"[ERROR] module v2: module \"{self.path}\" ({self.alias}) raised exception \"{e}\"")
return None
print(f"[ERROR] module v2: traceback:\n{traceback.format_exc()}")
return None, None
# module control unit
@@ -188,11 +191,16 @@ def queue_processor():
# modules are used in here
for mod in mcu.modules:
if mod.enabled:
if mod.version == 1 or mod.version == 2:
response = mod.process(msg)
if mod.version in [1, 2]:
response, formatting = mod.process(msg)
if response:
print(f"Responded using module {mod.path} ({mod.alias}) with text: {response}")
break
if not formatting:
print(f"Responded using module {mod.path} ({mod.alias}) with text: {response}")
break
elif formatting in ["Markdown", "MarkdownV2", "HTML"]:
print(f"Responded using module {mod.path} ({mod.alias}) with text (using {formatting}): {response}")
break
del message_queue[0]
else:
@@ -203,6 +211,7 @@ def queue_processor():
except Exception:
print(f"[ERROR] queue_processor: current message queue: {message_queue}")
print(f"[ERROR] Traceback:\n{traceback.format_exc()}")
print("[ERROR] queue_processor: error while processing message, trying to delete it...")
try:
del message_queue[0]
@@ -0,0 +1,26 @@
[
{
},
{
},
{
},
{
},
{
},
{},
{},
{
},
{
},
{
},
{
},
{
},
{},
{}
]
@@ -1 +0,0 @@
../auto-schedule-pro/additions.json
@@ -0,0 +1,96 @@
import json
import sys
if len(sys.argv) != 2:
sys.exit(1)
class Lesson:
def __init__(self):
pass
def read_from_schedule_pair(self, p):
self.time = p["time"].rsplit(':', 1)[0]
self.name = p["name"]
self.teacher = p["teacherName"]
self.type = p["tag"]
self.selectable = False
self.link = ""
self.nolink = True
def get_packable_object(self):
return {
"name": self.name,
"teacher": self.teacher,
"link": self.link,
"type": self.type,
"selectable": self.selectable,
"nolink": self.nolink
}
def day_to_lesson_pool(pairs):
pool = []
for p in pairs:
l = Lesson()
l.read_from_schedule_pair(p)
pool.append(l)
return pool
def lesson_pool_to_objs(pool):
times = []
for i in (list(map(int, (i.time.split(':')))) for i in pool):
if i not in times:
times.append(i)
times.sort(key = lambda x: x[0] * 60 + x[1])
result = {}
for i in times:
lesson_timestamp = f"{i[0]:02}:{i[1]:02}"
required_timestamp = f"{i[0]}:{i[1]}"
objs_dup = (j.get_packable_object() for j in pool if j.time == lesson_timestamp)
objs = []
for i in objs_dup:
if i not in objs:
objs.append(i)
if len(objs) == 0:
continue
elif len(objs) == 1:
result[required_timestamp] = list(objs)[0]
else:
result[required_timestamp] = list(objs)
return result
def process_week(week):
result = []
for weekday in ["Пн", "Вв", "Ср", "Чт", "Пт"]:
day_pool = day_to_lesson_pool(next(filter(lambda l: l['day'] == weekday, week))['pairs'])
result.append(lesson_pool_to_objs(day_pool))
result.append({})
result.append({})
return result
ext_schedule = json.load(open(sys.argv[1], 'r'))
int_schedule = []
int_schedule += process_week(ext_schedule["scheduleFirstWeek"])
int_schedule += process_week(ext_schedule["scheduleSecondWeek"])
print(json.dumps(int_schedule, ensure_ascii = False, indent = 4))
+375 -34
View File
@@ -1,15 +1,19 @@
from datetime import datetime
import json
import os
def readfile(filename):
with open(module_path + filename) as f:
return f.read()
def writefile(filename, data):
with open(module_path + filename, 'w') as f:
f.write(data)
# global constants
# Accusative - znahidnyj
WEEKDAYS_ACCUSATIVE = ["понеділок", "вівторок", "середу", "четвер", "п'ятницю", "суботу", "неділю"]
# Genitive - rodovyj
WEEKDAYS_GENITIVE_NEXT = ["наступного понеділка", "наступного вівторка", "наступної середи", "наступного четверга",
"наступної п'ятниці", "наступної суботи", "наступної неділі"]
@@ -17,9 +21,134 @@ WEEKDAYS_GENITIVE_NEXT = ["наступного понеділка", "насту
WEEKDAYS_GENITIVE_THIS = ["цього понеділка", "цього вівторка", "цієї середи", "цього четверга", "цієї п'ятниці",
"цієї суботи", "цієї неділі"]
lesson_types_to_strings = {
"lec": "лекція",
"prac": "практика",
"lab": "лабораторна",
"con": "консультація"
}
color_code_mapping = {
"lec": "🔵",
"prac": "🟡",
"lab": "🔴",
"con": "🟢"
}
PROGRESS_BAR_LENGTH = 16
# global variables
module_path = ""
def get_preference_by_id(user_id, name):
if not os.path.exists(module_path + f"preference-db/{user_id}.json"):
return None
raw_prefs = readfile(f"preference-db/{user_id}.json")
try:
preferences = json.loads(raw_prefs)
except Exception as e:
return None
if not name in preferences:
return None
return preferences[name]
def get_all_preferences_by_id(user_id):
user_preferences = {
"output-style": "legacy-vibrant",
"output-style-lesson": "None",
"output-style-lookup": "None"
}
# label defaults as defaults and let custom settings override these labels
for i in user_preferences:
user_preferences[i] += " <i>(default)</i>"
for i in user_preferences:
override = get_preference_by_id(user_id, i)
if override != None:
user_preferences[i] = override
return user_preferences
def set_preference_by_id(user_id, name, value):
if not os.path.exists(module_path + "preference-db/"):
os.mkdir(module_path + "preference-db/")
preferences = {}
if os.path.exists(module_path + f"preference-db/{user_id}.json"):
try:
raw_prefs = readfile(f"preference-db/{user_id}.json")
preferences = json.loads(raw_prefs)
except Exception as e:
preferences = {}
else:
preferences = {}
preferences[name] = value
final_data = json.dumps(preferences)
writefile(f"preference-db/{user_id}.json", final_data)
def clear_preference_by_id(user_id, name):
if not os.path.exists(module_path + "preference-db/"):
os.mkdir(module_path + "preference-db/")
preferences = {}
if os.path.exists(module_path + f"preference-db/{user_id}.json"):
try:
raw_prefs = readfile(f"preference-db/{user_id}.json")
preferences = json.loads(raw_prefs)
except Exception as e:
preferences = {}
else:
preferences = {}
if name in preferences:
del preferences[name]
final_data = json.dumps(preferences)
writefile(f"preference-db/{user_id}.json", final_data)
def load_template(template, part):
return readfile(f"templates/{template}/{part}.msg")
def get_color_code(lesson_type):
return color_code_mapping[lesson_type]
def escaped_string_markdownV2(input_string):
result_string = input_string
symbols_to_escape = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']
for symbol in symbols_to_escape:
result_string = result_string.replace(symbol, f"\\{symbol}")
return result_string
def escaped_string_html(input_string):
result_string = input_string
symbols_to_escape = ['<', '>']
for symbol in symbols_to_escape:
result_string = result_string.replace(symbol, f"\\{symbol}")
return result_string
def get_human_readable_date(start_datetime, end_datetime,
current_day, current_week):
@@ -27,7 +156,7 @@ def get_human_readable_date(start_datetime, end_datetime,
if ((current_day + 2) == int(start_datetime.strftime("%u"))) or \
((current_day == 6) and (start_datetime.strftime("%u") == "1")):
human_readable_date += "завтра "
elif current_week != int(start_datetime.strftime("%W")) % 2:
elif current_week != (int(start_datetime.strftime("%W")) + 1) % 2:
human_readable_date += f"{WEEKDAYS_GENITIVE_NEXT[int(start_datetime.strftime('%u')) - 1]} "
elif current_day != (int(start_datetime.strftime("%u")) - 1):
human_readable_date += f"{WEEKDAYS_GENITIVE_THIS[int(start_datetime.strftime('%u')) - 1]} "
@@ -43,27 +172,146 @@ def get_human_readable_date(start_datetime, end_datetime,
return human_readable_date
def generate_lesson_description(lesson, start_datetime, end_datetime, current_day, current_week, overrides={}):
output_settings = {"name": True, "date": True, "teacher": True, "link": True}
output_settings.update(overrides)
def get_name_of_lesson_type(lesson_type):
if lesson_type in lesson_types_to_strings:
return lesson_types_to_strings[lesson_type]
result = ""
if output_settings['name']:
result += f"{lesson['name']}\n"
def make_progress_bar(start_datetime, total_bar_count):
current_time = datetime.now()
if output_settings['date']:
human_readable_date = get_human_readable_date(start_datetime, end_datetime,
seconds_elapsed = (current_time.hour - start_datetime.hour) * 3600 \
+ (current_time.minute - start_datetime.minute) * 60 \
+ (current_time.second - start_datetime.second)
total_seconds = 1 * 3600 + 30 * 60
percent_elapsed = max(min(seconds_elapsed / total_seconds, 1), 0)
if (current_time.day < start_datetime.day):
percent_elapsed = 0
elif (current_time.day > start_datetime.day):
percent_elapsed = 1
bars_ticked = round(percent_elapsed * total_bar_count)
bars_not_ticked = total_bar_count - bars_ticked
status_line = "[" + "#" * bars_ticked + "-" * bars_not_ticked + "]"
status_bar_text = f"{round(percent_elapsed*100)}%"
status_list_text_start_position = round((len(status_line) - len(status_bar_text))/2)
status_line_overlayed = (status_line[:status_list_text_start_position] + status_bar_text \
+ status_line[status_list_text_start_position+len(status_bar_text):]).replace("-", "--")
return status_line_overlayed
def generate_lesson_description(lesson, start_datetime, end_datetime, current_day, current_week, overrides={},
custom_name_prefix="Назва", template="legacy-vibrant", force_date_at_top=False):
if lesson.__class__ == dict:
if force_date_at_top:
total_result = load_template(template, "date")
human_readable_date = get_human_readable_date(start_datetime, end_datetime,
current_day, current_week)
total_result = total_result.replace("%DATE%", human_readable_date)
if "full" in overrides and overrides["full"]:
total_result += load_template(template, "multiple")
else:
total_result += load_template(template, "multiple-short")
for i in ['name', 'teacher']:
total_result = total_result.replace(f"%{i.upper()}%", lesson[i])
total_result = total_result.replace("%DATE%", human_readable_date)
total_result = total_result.replace("%TYPE%", get_name_of_lesson_type(lesson['type']))
total_result = total_result.replace("%NAME_PREFIX%", custom_name_prefix)
total_result = total_result.replace("%COLOR_CODE%", get_color_code(lesson['type']))
if ('nolink' not in lesson) or (not lesson['nolink']):
total_result = total_result.replace("%LINK%", lesson['link'])
else:
total_result = total_result.replace("%LINK%", "#")
if 'comment' in lesson:
total_result += load_template(template, "comment")
total_result = total_result.replace("%COMMENT%", lesson["comment"])
if "full" in overrides and overrides["full"]:
total_result += "\n"
return total_result
else:
active_template = load_template(template, "single")
for i in ['name', 'teacher']:
active_template = active_template.replace(f"%{i.upper()}%", lesson[i])
human_readable_date = get_human_readable_date(start_datetime, end_datetime,
current_day, current_week)
result += f"Дата: {human_readable_date}\n"
if output_settings['teacher']:
result += f"Викладач: {lesson['teacher']}\n"
active_template = active_template.replace("%DATE%", human_readable_date)
active_template = active_template.replace("%TYPE%", get_name_of_lesson_type(lesson['type']))
active_template = active_template.replace("%NAME_PREFIX%", custom_name_prefix)
active_template = active_template.replace("%COLOR_CODE%", get_color_code(lesson['type']))
active_template = active_template.replace("%PROGRESS_BAR%", make_progress_bar(start_datetime, PROGRESS_BAR_LENGTH >> 1))
if output_settings['link']:
result += f"Посилання на пару: {lesson['link']}"
if ('nolink' not in lesson) or (not lesson['nolink']):
active_template = active_template.replace("%LINK%", lesson['link'])
else:
active_template = active_template.replace("%LINK%", "#")
return result
if 'comment' in lesson:
active_template += load_template(template, "comment")
active_template = active_template.replace("%COMMENT%", lesson["comment"])
return active_template
elif lesson.__class__ == list:
if not force_date_at_top:
total_result = load_template(template, "date-progress")
total_result = total_result.replace("%PROGRESS_BAR%", make_progress_bar(start_datetime, PROGRESS_BAR_LENGTH))
else:
total_result = load_template(template, "date")
human_readable_date = get_human_readable_date(start_datetime, end_datetime,
current_day, current_week)
total_result = total_result.replace("%DATE%", human_readable_date)
for l in lesson:
if "full" in overrides and overrides["full"]:
active_template = load_template(template, "multiple")
else:
active_template = load_template(template, "multiple-short")
for i in ['name', 'teacher']:
active_template = active_template.replace(f"%{i.upper()}%", l[i])
active_template = active_template.replace("%DATE%", human_readable_date)
active_template = active_template.replace("%TYPE%", get_name_of_lesson_type(l['type']))
active_template = active_template.replace("%NAME_PREFIX%", custom_name_prefix)
active_template = active_template.replace("%COLOR_CODE%", get_color_code(l['type']))
if ('nolink' not in l) or (not l['nolink']):
active_template = active_template.replace("%LINK%", l['link'])
else:
active_template = active_template.replace("%LINK%", "#")
if 'comment' in l:
active_template += load_template(template, "comment")
active_template = active_template.replace("%COMMENT%", l["comment"])
if "full" in overrides and overrides["full"]:
active_template += "\n"
total_result += active_template
return total_result
def get_schedule_data_from(filename):
@@ -76,8 +324,15 @@ def get_schedule_data_from(filename):
timestamp = day_number * 86400 + int(lesson_time.split(":")[0]) * 3600 \
+ int(lesson_time.split(":")[1]) * 60
new_record = dict(raw_schedule[day_number][lesson_time])
new_record["source"] = filename.split(".json")[0]
new_record = raw_schedule[day_number][lesson_time]
item_source = filename.split(".json")[0]
if new_record.__class__ == list:
for item in new_record:
item["source"] = item_source
else:
new_record["source"] = item_source
baked_schedule[timestamp] = new_record
return baked_schedule
@@ -105,14 +360,16 @@ def process_arguments(args, base_day):
return preferences, selected_day
def get_lesson_description(schedule, reference_time, lesson_time, current_day, current_week, overrides={}):
def get_lesson_description(schedule, reference_time, lesson_time, current_day, current_week, overrides={},
custom_name_prefix="Назва", template="legacy-vibrant", force_date_at_top=False):
lesson_record = schedule[lesson_time]
lesson_start_datetime = datetime.fromtimestamp(reference_time + lesson_time)
lesson_end_datetime = datetime.fromtimestamp(reference_time + lesson_time + 5400)
return generate_lesson_description(lesson_record, lesson_start_datetime, lesson_end_datetime, current_day,
current_week, overrides=overrides)
current_week, overrides=overrides, custom_name_prefix=custom_name_prefix, template=template,
force_date_at_top=force_date_at_top)
def process(message, path):
@@ -124,14 +381,15 @@ def process(message, path):
# one printable symbol, so this is already protected
base_command = full_command[0].lower()
if base_command not in ["!пара", "!пари"]:
return ""
if base_command not in ["!пара", "!пари", "!schedule-ctl",
"!para", "!pary"]:
return None, None
global module_path
module_path = path
schedule = get_schedule_data_from("schedule.json")
schedule.update(get_schedule_data_from("additions.json"))
schedule = get_schedule_data_from("schedule-v2.json")
schedule.update(get_schedule_data_from("additions-v2.json"))
current_time = datetime.now()
@@ -143,8 +401,24 @@ def process(message, path):
reference_time = int(current_time.strftime("%s")) - current_seconds
if base_command == "!пара":
'''
if base_command in ["!пара", "!para"]:
# easter egg
study_begin_ts = int(datetime(year=2025, month=9, day=1).strftime("%s"))
current_ts = int(datetime.now().strftime("%s"))
until_study_day = study_begin_ts - current_ts
if -3600*4 < until_study_day < 0:
return "Навчання от-от розпочнеться!", None
elif 0 <= until_study_day < 3600*24*28:
return f"До навчання залишилося {until_study_day} секунд..." \
f" ({round(until_study_day/3600, 4)} годин," \
f" {round(until_study_day/3600/24, 4)} діб)", None
elif until_study_day >= 3600*24*28:
return "Ви маєте законне право відпочити, пари почнуться не скоро", None
# actual lesson finding code
upcoming_lessons = [timestamp for timestamp in schedule if timestamp > current_seconds - 5400]
if len(upcoming_lessons) > 0:
@@ -152,13 +426,36 @@ def process(message, path):
else:
closest_lesson_time = min(schedule)
return "Актуальна пара: " + get_lesson_description(schedule, reference_time, closest_lesson_time, current_day,
current_week)
'''
# shifting lesson pointer if requested to do so
if len(full_command) >= 2:
possible_times = list(schedule.keys())
current_pointer_position = possible_times.index(closest_lesson_time)
total_list_length = len(possible_times)
return "Ви маєте законне право відпочити, пари почнуться не скоро"
if len(full_command[1]) > 1 and full_command[1][1:].isdigit():
if full_command[1][0] == "+":
current_pointer_position = (current_pointer_position + int(full_command[1][1:])) % total_list_length
else:
current_pointer_position = (current_pointer_position - int(full_command[1][1:])) % total_list_length
elif base_command == "!пари":
closest_lesson_time = possible_times[current_pointer_position]
# getting corrent style
output_style_preference = "legacy-vibrant"
general_output_style_preference = get_preference_by_id(message.from_user.id, "output-style")
if general_output_style_preference != None:
output_style_preference = general_output_style_preference
specific_output_style_preference = get_preference_by_id(message.from_user.id, "output-style-lesson")
if specific_output_style_preference != None:
output_style_preference = specific_output_style_preference
# returning generated pair description
return get_lesson_description(schedule, reference_time, closest_lesson_time, current_day,
current_week, custom_name_prefix="Актуальна пара", template=output_style_preference), "HTML"
elif base_command in ["!пари", "!pary"]:
base_day = current_week * 7 + current_day
if len(full_command) >= 2:
@@ -170,8 +467,52 @@ def process(message, path):
lesson_list = [i for i in schedule if selected_day * 86400 <= i < (selected_day + 1) * 86400]
lesson_descriptions_list = ["Назва: " + get_lesson_description(schedule, reference_time, lesson_time,
current_day, current_week, overrides=preferences)
output_style_preference = "legacy-vibrant"
general_output_style_preference = get_preference_by_id(message.from_user.id, "output-style")
if general_output_style_preference != None:
output_style_preference = general_output_style_preference
specific_output_style_preference = get_preference_by_id(message.from_user.id, "output-style-lookup")
if specific_output_style_preference != None:
output_style_preference = specific_output_style_preference
lesson_descriptions_list = [get_lesson_description(schedule, reference_time, lesson_time, current_day,
current_week, overrides=preferences, custom_name_prefix="Назва", template=output_style_preference, force_date_at_top=True)
for lesson_time in lesson_list]
return f"Пари у {WEEKDAYS_ACCUSATIVE[selected_day % 7]}:\n" + "\n\n".join(lesson_descriptions_list)
return f"<b><u>Пари у {WEEKDAYS_ACCUSATIVE[selected_day % 7]}</u></b>:\n\n\n" + "\n".join(lesson_descriptions_list), "HTML"
elif base_command == "!schedule-ctl" and len(full_command) >= 2:
if full_command[1] == "list":
prefs = get_all_preferences_by_id(message.from_user.id)
return "Ваші персональні налаштування:\n" + '\n'.join([f"- {k} = {v}" for k, v in prefs.items()]), "HTML"
elif full_command[1] == "set" and len(full_command) == 4:
prefs = get_all_preferences_by_id(message.from_user.id)
if full_command[2] in prefs:
if full_command[2] in ["output-style", "output-style-lesson", "output-style-lookup"]:
if full_command[3] not in os.listdir(module_path + "templates/"):
return f"Стилю {full_command[3]} не існує; доступні варіанти: " \
+ ', '.join(os.listdir(module_path + "templates/")), "HTML"
previous_value = prefs[full_command[2]]
prefs[full_command[2]] = full_command[3]
set_preference_by_id(message.from_user.id, full_command[2], full_command[3])
return f"Змінено значення {full_command[2]}: {previous_value} -> {full_command[3]}", "HTML"
else:
return f"Такого налаштування не існує; переглянути наявні налаштування можна за допомогою команди <u>!schedule-ctl list</u>", "HTML"
elif full_command[1] == "get" and len(full_command) == 3:
requested_preference = get_preference_by_id(message.from_user.id, full_command[2])
return f"Налаштування {full_command[2]} має значення {requested_preference}", "HTML"
elif full_command[1] == "clear" and len(full_command) == 3:
clear_preference_by_id(message.from_user.id, full_command[2])
return f"Очищено значення для налаштування {full_command[2]}, надалі для нього використовуватиметься стандартне значення", "HTML"
else:
return "Такої команди не існує (або був використаний помилковий синтаксис)", "HTML"
@@ -0,0 +1,26 @@
[
{
},
{
},
{
},
{
},
{
},
{},
{},
{
},
{
},
{
},
{
},
{
},
{},
{}
]
@@ -0,0 +1,54 @@
[
{
},
{
},
{
},
{
"9:00": {
"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення (ЕКЗАМЕН)",
"teacher": "Овчар Раїса Федорівна",
"link": "https://us02web.zoom.us/j/84532519615?pwd=eDFRMWtJTkxKcklpa1JUSjFmZHNyUT09",
"type": "prac",
"selectable": false
}
},
{
},
{},
{},
{
"9:00": {
"name": "Інженерія програмного забезпечення (ЕКЗАМЕН)",
"teacher": "Васильєва Марія Давидівна",
"link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039",
"type": "prac",
"selectable": false
}
},
{
},
{
},
{
"16:30": {
"name": "Теорія електричних кіл та сигналів",
"teacher": "Лободзинський Вадим Юрійович",
"link": "https://meet.google.com/gwx-sshq-sqb",
"type": "con",
"selectable": false
}
},
{
"9:00": {
"name": "Теорія електричних кіл та сигналів (ЕКЗАМЕН)",
"teacher": "Лободзинський Вадим Юрійович",
"link": "https://meet.google.com/gwx-sshq-sqb",
"type": "prac",
"selectable": false
}
},
{},
{}
]
@@ -0,0 +1,307 @@
[
{
"8:30": {
"name": "Політична наука: конфліктологічний підхід",
"teacher": "Багінський Андрій Владиславович",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
},
"10:25": [
{
"name": "Захист персональних даних: стандарти ЄС та Ради Європи",
"teacher": "Дубняк М. В.",
"link": "https://us04web.zoom.us/j/7423381732?pwd=c1pJclU2ZDRUWDgyUE10dmhJUDhiZz09",
"type": "lec",
"selectable": true
},
{
"name": "Психологія",
"teacher": "Волянюк Н. Ю.",
"link": "https://us04web.zoom.us/j/6762396563?pwd=L1EvTmpFZHBSdkRHUjZyRG95SFl4QT09",
"type": "lec",
"selectable": true
},
{
"name": "Психологія конфлікту",
"teacher": "Москаленко О. В.",
"link": "https://zoom.us/j/5175581158?pwd=UlhFY3lBOUUrNG9pclRVNndTNTZzQT09",
"type": "prac",
"selectable": true
}
],
"14:15": {
"name": "Основи електронного урядування",
"teacher": "Чукут Світлана Анатоліївна",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
}
},
{
"12:20": {
"name": "Інженерія програмного забезпечення",
"teacher": "Васильєва Марія Давидівна",
"link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039",
"type": "lab",
"selectable": false
},
"14:15": {
"name": "Теорія електричних кіл та сигналів",
"teacher": "Лободзинський В. Ю. & Ілліна О. О.",
"link": "https://meet.google.com/gwx-sshq-sqb",
"type": "lab",
"selectable": false
}
},
{
"8:30": {
"name": "Теорія ймовірності та математична статистика",
"teacher": "Марковський Олександр Петрович",
"link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc",
"type": "lec",
"selectable": false
},
"10:25": {
"name": "Вступ до операційної системи Linux",
"teacher": "Роковий Олександр Петрович",
"link": "https://bbb.comsys.kpi.ua/b/ole-knq-z9h-pyl",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Інженерія програмного забезпечення",
"teacher": "Васильєва Марія Давидівна",
"link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039",
"type": "lec",
"selectable": false
}
},
{
"10:25": {
"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення",
"teacher": "Стаматієва Вікторія В'ячеславівна",
"link": "https://us04web.zoom.us/j/2313886209?pwd=dnZHanV3cU9LUXJBVWYyYVArUFg5dz09",
"type": "prac",
"selectable": false
},
"12:20": {
"name": "Практичний курс іноземної мови. Частина 2",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/tno-cxef-zyi",
"type": "prac",
"selectable": false
},
"14:15": {
"name": "Соціальна психологія",
"teacher": "Блохіна Ірина Олександрівна",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
},
"16:10": {
"name": "Основи електронного урядування",
"teacher": "Чукут Світлана Анатоліївна",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
}
},
{
"8:30": {
"name": "Вступ до філософії",
"teacher": "Руденко Тамара Петрівна",
"link": "https://zoom.us/j/9358038101?pwd=d0pwUHRDY0dxbngrU09PYll6UXpNZz09",
"type": "lec",
"selectable": false
},
"10:25": {
"name": "Теорія електричних кіл та сигналів",
"teacher": "Лободзинський Вадим Юрійович",
"link": "https://meet.google.com/gwx-sshq-sqb",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення",
"teacher": "Овчар Раїса Федорівна",
"link": "https://us02web.zoom.us/j/84532519615?pwd=eDFRMWtJTkxKcklpa1JUSjFmZHNyUT09",
"type": "lec",
"selectable": false
}
},
{
"10:00": {
"name": "Теорія ймовірності та математична статистика",
"teacher": "Марковський Олександр Петрович",
"link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc",
"type": "con",
"selectable": false
}
},
{},
{
"10:25": [
{
"name": "Психологія",
"teacher": "Сербова О. В.",
"link": "https://us05web.zoom.us/j/9299459744?pwd=Z3VQdWEvQ0tyc3pMbzl2bHN6Y1VlUT09",
"type": "prac",
"selectable": true
},
{
"name": "Психологія конфлікту",
"teacher": "Кононець М. О.",
"link": "https://zoom.us/j/9953120638?pwd=WGZsYUhPK2hxbUc4YVJmT0lhdysyZz09",
"type": "lec",
"selectable": true
}
],
"12:20": [
{
"name": "Політична наука: конфліктологічний підхід",
"teacher": "Северинчик О. П.",
"link": "https://us04web.zoom.us/j/2279372490?pwd=bHR5QmpCT0tvQXJMLzRzaldHbFZ3dz09",
"type": "prac",
"selectable": true
},
{
"name": "Захист персональних даних: стандарти ЄС та Ради Європи",
"teacher": "Самчинська О. А.",
"link": "https://us04web.zoom.us/j/72149205587?pwd=Ld2Xj7RORYEwnUYauB5yEbATwwsNan.1",
"type": "prac",
"selectable": true
}
],
"14:15": {
"name": "Розумні міста",
"teacher": "Чукут Світлана Анатоліївна",
"link": "https://zoom.us/j/5439919039?pwd=Um8wWHV4ZjZpallCWkpVQ08wZGNzdz09",
"type": "lec",
"selectable": true
}
},
{
"10:25": {
"name": "Вступ до філософії",
"teacher": "Руденко Тамара Петрівна",
"link": "https://zoom.us/j/9358038101?pwd=d0pwUHRDY0dxbngrU09PYll6UXpNZz09",
"type": "prac",
"selectable": false
},
"14:15": {
"name": "Теорія ймовірності та математична статистика",
"teacher": "Марковський Олександр Петрович",
"link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc",
"type": "prac",
"selectable": false
}
},
{
"8:30": {
"name": "Теорія ймовірності та математична статистика",
"teacher": "Марковський Олександр Петрович",
"link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc",
"type": "lec",
"selectable": false
},
"10:25": {
"name": "Вступ до операційної системи Linux",
"teacher": "Роковий Олександр Петрович",
"link": "https://bbb.comsys.kpi.ua/b/ole-knq-z9h-pyl",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Інженерія програмного забезпечення",
"teacher": "Васильєва Марія Давидівна",
"link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039",
"type": "lec",
"selectable": false
},
"14:15": {
"name": "Інженерія програмного забезпечення",
"teacher": "Васильєва Марія Давидівна",
"link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039",
"type": "lec",
"selectable": false
}
},
{
"8:30": {
"name": "Вступ до операційної системи Linux",
"teacher": "Алєнін Олег Ігорович",
"link": "https://us04web.zoom.us/j/4122071690?pwd=bANFi3fk9pWvRu9TSBRGzfxFHuEkZC.1",
"type": "lab",
"selectable": false
},
"10:25": {
"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення",
"teacher": "Стаматієва Вікторія В'ячеславівна",
"link": "https://us04web.zoom.us/j/2313886209?pwd=dnZHanV3cU9LUXJBVWYyYVArUFg5dz09",
"type": "prac",
"selectable": false
},
"12:20": {
"name": "Практичний курс іноземної мови. Частина 2",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/tno-cxef-zyi",
"type": "prac",
"selectable": false
},
"14:15": [
{
"name": "Соціальна психологія",
"teacher": "Винославська О. В.",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
},
{
"name": "Розумні міста",
"teacher": "Чукут Світлана Анатоліївна",
"link": "https://zoom.us/j/5439919039?pwd=Um8wWHV4ZjZpallCWkpVQ08wZGNzdz09",
"type": "prac",
"selectable": true
}
]
},
{
"10:25": {
"name": "Теорія електричних кіл та сигналів",
"teacher": "Лободзинський Вадим Юрійович",
"link": "https://meet.google.com/gwx-sshq-sqb",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення",
"teacher": "Овчар Раїса Федорівна",
"link": "https://us02web.zoom.us/j/84532519615?pwd=eDFRMWtJTkxKcklpa1JUSjFmZHNyUT09",
"type": "lec",
"selectable": false
}
},
{
"10:00": {
"name": "Теорія ймовірності та математична статистика",
"teacher": "Марковський Олександр Петрович",
"link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc",
"type": "con",
"selectable": false
}
},
{}
]
@@ -0,0 +1,51 @@
[
{
},
{
},
{
"9:00": {
"name": "Системне програмування",
"teacher": "Порєв Віктор Миколайович",
"link": "https://us02web.zoom.us/j/2256183863?pwd=Q3FmZGVSbW5xUnFQZERpdlcxSElrUT09",
"type": "prac",
"selectable": false,
"comment": "Екзамен!"
}
},
{
},
{
},
{},
{},
{
"14:00": {
"name": "Комп'ютерна електроніка",
"teacher": "Виноградов Юрій Миколайович",
"link": "https://bbb.comsys.kpi.ua/b/x2g-dqc-6fg",
"type": "lab",
"selectable": false,
"comment": "Екзамен! Деталі: https://t.me/c/1856295652/522"
}
},
{
},
{
},
{
},
{
"9:00": {
"name": "Архітектура комп'ютерів. Частина 1. Арифметичні та управляючі пристрої",
"teacher": "Жабін Валерій Іванович",
"link": "https://bbb.comsys.kpi.ua/rooms/jwe-mmp-lb5-jf2/join",
"type": "prac",
"selectable": false,
"comment": "Екзамен!"
}
},
{},
{}
]
@@ -0,0 +1,348 @@
[
{
"10:25": {
"name": "Алгоритми та методи обчислень",
"teacher": "Новотарський Михайло Анатолійович",
"link": "https://us02web.zoom.us/j/85323196480?pwd=aXRONTh2SUxmdFZ5M1N5NU5VcGVlZz09",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Комп'ютерна електроніка",
"teacher": "Виноградов Юрій Миколайович",
"link": "https://bbb.comsys.kpi.ua/b/x2g-dqc-6fg",
"type": "lec",
"selectable": false
}
},
{
"10:25": {
"name": "Практичний курс іноземної мови. Частина 2",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/tno-cxef-zyi",
"type": "prac",
"selectable": false
},
"12:20": {
"name": "Комп'ютерна електроніка",
"teacher": "Виноградов Юрій Миколайович",
"link": "https://bbb.comsys.kpi.ua/b/x2g-dqc-6fg",
"type": "lab",
"selectable": false
},
"14:15": {
"name": "Стратегія охорони навколишнього середовища",
"teacher": "Романюкіна Ірина Юріївна",
"link": "https://us05web.zoom.us/j/84713917316?pwd=MR0w0aDdxnka2H64qqCpVcUgfuhaQP.1",
"type": "prac",
"selectable": false
}
},
{
"8:30": [
{
"name": "Естетика промислового дизайну",
"teacher": "Кузіна Ольга Юріївна",
"link": "https://us05web.zoom.us/j/87803902417?pwd=64D8BbLeLkvweVlWlY2lX95UaA0XMG.1",
"type": "lec",
"selectable": true
},
{
"name": "Logic",
"teacher": "Казаков Мстислав Андрійович",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
},
{
"name": "Дизайн презентації для професійної діяльності",
"teacher": "Іщенко Олександр Анатолійович",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
},
{
"name": "Стилі в образотворчому мистецтві",
"teacher": "Оляніна Світлана Валеріївна",
"link": "https://us05web.zoom.us/j/85408874003?pwd=UGdyRWNwSytSM0Zhc3dMTG4yek9sdz09",
"type": "lec",
"selectable": true
}
],
"10:25": [
{
"name": "Основи підприємницької діяльності",
"teacher": "Марченко Валентина Миколаївна",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
},
{
"name": "Корпоративна культура та діловий етикет",
"teacher": "Цимбаленко Яна Юріївна",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
},
{
"name": "Дизайн презентації для професійної діяльності",
"teacher": "Іщенко Олександр Анатолійович",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
}
],
"12:20": [
{
"name": "Логіка",
"teacher": "Піхорович Василь Дмитрович",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
},
{
"name": "Корпоративна культура та діловий етикет",
"teacher": "Тимошенко Наталія Леонідівна",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true
},
{
"name": "Циклічні види спорту",
"teacher": "Черевичко Олександр Геннадійович",
"link": "https://us05web.zoom.us/j/84221628555?pwd=ZjVDV3lDTjRES0lOdkk4cUlUaWp0UT09",
"type": "prac",
"selectable": true
}
],
"14:15": [
{
"name": "Єдиноборства",
"teacher": "Назимок Віктор Васильович",
"link": "https://us04web.zoom.us/j/2276337141?pwd=ejNrUkpPQk9iQlhMMnprOEg3UHNnZz09",
"type": "prac",
"selectable": true
},
{
"name": "Ігрові види спорту",
"teacher": "Сироватко З. В.",
"link": "https://us05web.zoom.us/j/7112676497?pwd=SzEySzRGUzh6NGcxdXZtQ2ovYzhCUT09",
"type": "prac",
"selectable": true
},
{
"name": "Силові види спорту",
"teacher": "Корюкаєв Микола Миколайович",
"link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09",
"type": "prac",
"selectable": true
},
{
"name": "Складно-координаційні види спорту",
"teacher": "Козлова Тетяна Георгіївна",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
}
]
},
{
"8:30": {
"name": "Алгоритми та методи обчислень",
"teacher": "Порєв Віктор Миколайович",
"link": "https://us02web.zoom.us/j/2256183863?pwd=Q3FmZGVSbW5xUnFQZERpdlcxSElrUT09",
"type": "lab",
"selectable": false
},
"10:25": {
"name": "Організація баз даних",
"teacher": "Болдак Андрій Олександрович",
"link": "https://us04web.zoom.us/j/5439063374?pwd=VG1iODU0WmpCNTlCVXJJTitYU2Nmdz09",
"type": "lab",
"selectable": false
}
},
{
"8:30": {
"name": "Системне програмування",
"teacher": "Порєв Віктор Миколайович",
"link": "https://us02web.zoom.us/j/2256183863?pwd=Q3FmZGVSbW5xUnFQZERpdlcxSElrUT09",
"type": "lec",
"selectable": false
},
"10:25": {
"name": "Організація баз даних",
"teacher": "Болдак Андрій Олександрович",
"link": "https://us04web.zoom.us/j/5439063374?pwd=VG1iODU0WmpCNTlCVXJJTitYU2Nmdz09",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Архітектура комп'ютерів. Частина 1. Арифметичні та управляючі пристрої",
"teacher": "Жабін Валерій Іванович",
"link": "https://bbb.comsys.kpi.ua/rooms/jwe-mmp-lb5-jf2/join",
"type": "lec",
"selectable": false
},
"14:15": {
"name": "Стратегія охорони навколишнього середовища",
"teacher": "Романюкіна Ірина Юріївна",
"link": "https://us05web.zoom.us/j/84674156408?pwd=BoZcB13bbA82SxL503YaQgabjUiqC9.1",
"type": "lec",
"selectable": false
}
},
{},
{},
{
"10:25": {
"name": "Алгоритми та методи обчислень",
"teacher": "Новотарський Михайло Анатолійович",
"link": "https://us02web.zoom.us/j/85323196480?pwd=aXRONTh2SUxmdFZ5M1N5NU5VcGVlZz09",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Комп'ютерна електроніка",
"teacher": "Виноградов Юрій Миколайович",
"link": "https://bbb.comsys.kpi.ua/b/x2g-dqc-6fg",
"type": "lec",
"selectable": false
}
},
{
"8:30": {
"name": "Архітектура комп'ютерів. Частина 1. Арифметичні та управляючі пристрої",
"teacher": "Верба Олександр Андрійович",
"link": "https://us04web.zoom.us/j/7382214783?pwd=RnZ3SWgwK1JoVkZtNndnKzdPZjFGdz09",
"type": "lab",
"selectable": false
},
"10:25": {
"name": "Практичний курс іноземної мови. Частина 2",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/tno-cxef-zyi",
"type": "prac",
"selectable": false
}
},
{
"12:20": [
{
"name": "Стилі в образотворчому мистецтві",
"teacher": "Оляніна Світлана Валеріївна",
"link": "https://us05web.zoom.us/j/85408874003?pwd=UGdyRWNwSytSM0Zhc3dMTG4yek9sdz09",
"type": "prac",
"selectable": true
},
{
"name": "Естетика промислового дизайну",
"teacher": "Кузіна Ольга Юріївна",
"link": "https://us05web.zoom.us/j/87803902417?pwd=64D8BbLeLkvweVlWlY2lX95UaA0XMG.1",
"type": "prac",
"selectable": true
},
{
"name": "Логіка",
"teacher": "Сторожик Марина Іванівна",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
},
{
"name": "Logic",
"teacher": "Казаков Мстислав Андрійович",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
},
{
"name": "Циклічні види спорту",
"teacher": "Черевичко Олександр Геннадійович",
"link": "https://us05web.zoom.us/j/84221628555?pwd=ZjVDV3lDTjRES0lOdkk4cUlUaWp0UT09",
"type": "prac",
"selectable": true
}
],
"14:15": [
{
"name": "Єдиноборства",
"teacher": "Назимок Віктор Васильович",
"link": "https://us04web.zoom.us/j/2276337141?pwd=ejNrUkpPQk9iQlhMMnprOEg3UHNnZz09",
"type": "prac",
"selectable": true
},
{
"name": "Ігрові види спорту",
"teacher": "Сироватко З. В.",
"link": "https://us05web.zoom.us/j/7112676497?pwd=SzEySzRGUzh6NGcxdXZtQ2ovYzhCUT09",
"type": "prac",
"selectable": true
},
{
"name": "Силові види спорту",
"teacher": "Корюкаєв Микола Миколайович",
"link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09",
"type": "prac",
"selectable": true
},
{
"name": "Складно-координаційні види спорту",
"teacher": "Козлова Тетяна Георгіївна",
"link": "(посилання відсутнє!)",
"type": "prac",
"selectable": true
}
]
},
{
"8:30": {
"name": "Системне програмування",
"teacher": "Порєв Віктор Миколайович",
"link": "https://us02web.zoom.us/j/2256183863?pwd=Q3FmZGVSbW5xUnFQZERpdlcxSElrUT09",
"type": "lab",
"selectable": false
}
},
{
"8:30": {
"name": "Системне програмування",
"teacher": "Порєв Віктор Миколайович",
"link": "https://us02web.zoom.us/j/2256183863?pwd=Q3FmZGVSbW5xUnFQZERpdlcxSElrUT09",
"type": "lec",
"selectable": false
},
"10:25": {
"name": "Організація баз даних",
"teacher": "Болдак Андрій Олександрович",
"link": "https://us04web.zoom.us/j/5439063374?pwd=VG1iODU0WmpCNTlCVXJJTitYU2Nmdz09",
"type": "lec",
"selectable": false
},
"12:20": {
"name": "Архітектура комп'ютерів. Частина 1. Арифметичні та управляючі пристрої",
"teacher": "Жабін Валерій Іванович",
"link": "https://bbb.comsys.kpi.ua/rooms/jwe-mmp-lb5-jf2/join",
"type": "lec",
"selectable": false
}
},
{},
{}
]
@@ -0,0 +1,43 @@
[
{
},
{
},
{
},
{
},
{
},
{
"9:00": {
"name": "Архітектура комп'ютерів. Частина 2. Процесори",
"teacher": "Клименко Ірина Анатоліївна",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-7ds-r3u-otz/join",
"type": "lec",
"selectable": false,
"nolink": false
}
},
{},
{
},
{
},
{
"13:00": {
"name": "Комп'ютерна схемотехніка",
"teacher": "Ткаченко Валентина Василівна & Старовєров Костянтин Сергійович",
"link": "https://bbb.comsys.kpi.ua/rooms/pxx-mtu-cxz-ets/join",
"type": "lec",
"selectable": false,
"nolink": false
}
},
{
},
{
},
{},
{}
]
@@ -0,0 +1,707 @@
[
{
},
{
"8:30": {
"name": "Архітектура комп'ютерів. Частина 2. Процесори",
"teacher": "Клименко Ірина Анатоліївна",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-7ds-r3u-otz/join",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "<a href=\"https://us02web.zoom.us/j/5274433531?pwd=dXkvanJ1OThaWjBXd2RPR0svU2JtUT09\">додаткове посилання (Zoom)</a>"
},
"10:25": {
"name": "Паралельне програмування",
"teacher": "Корочкін Олександр Володимирович",
"link": "https://bbb.comsys.kpi.ua/rooms/vvf-akd-9bh-uwu/join",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "<a href=\"https://us02web.zoom.us/j/86949818084?pwd=id4SIsb62CKsvkbITjShLYecbX1QSX.1\">додаткове посилання (Zoom)</a>"
},
"12:20": {
"name": "Комп'ютерна схемотехніка",
"teacher": "Ткаченко Валентина Василівна & Старовєров Костянтин Сергійович",
"link": "https://us02web.zoom.us/j/7824097989?pwd=SzVuL1YxM2w1WjBSQ2w0Mnd0V0FYdz09",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "<a href=\"https://us02web.zoom.us/j/5274433531?pwd=dXkvanJ1OThaWjBXd2RPR0svU2JtUT09\">додаткове посилання (Zoom)</a>"
},
"14:15": {
"name": "Правознавство",
"teacher": "Попов Костянтин Леонідович",
"link": "https://us02web.zoom.us/j/8589662326?pwd=L3dGcUs5WFVHdnlOb1ZkUlV1dmdLZz09",
"type": "lec",
"selectable": false,
"nolink": false
},
"16:10": [
{
"name": "Вступ до штучного інтелекту",
"teacher": "Таран Владислав Ігорович",
"link": "https://bbb.comsys.kpi.ua/b/vla-thz-lwo-3uh",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технології програмування користувацьких інтерфейсів (Front-end)",
"teacher": "Алещенко Олексій Вадимович",
"link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технології розроблення серверного програмного забезпечення (Back-end)",
"teacher": "Валько В. .",
"link": "https://meet.google.com/esi-ybgp-xwg",
"type": "lec",
"selectable": true,
"nolink": false
}
]
},
{
"8:30": [
{
"name": "Життєвий цикл розробки програмного забезпечення",
"teacher": "Галушко Дмитро Олександрович",
"link": "https://us05web.zoom.us/j/5761967742?pwd=VnpZTW1HdzdVM215Q2I3VTlPS1YxQT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Комп’ютерна графіка та мультимедіа",
"teacher": "Родіонов Павло Юрійович",
"link": "https://meet.google.com/nfs-jejb-xxd",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Методи та технології штучного інтелекту",
"teacher": "Шимкович Володимир Миколайович",
"link": "https://us02web.zoom.us/j/3428560060?pwd=YTZ4Vm8xVTYzTGhzQk5ONGpTcmVSZz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Розробка програмного забезпечення на платформі Java",
"teacher": "Ковальчук Олександр Миронович",
"link": "https://meet.google.com/ddt-vznu-hos",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технології та засоби розробки комп'ютерної графіки та мультимедіа",
"teacher": "Хмелюк Марина Сергіївна",
"link": "https://us04web.zoom.us/j/9240595434?pwd=UzFFWlFndWw0Sk1mTWJJeFdIOVljdz09",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": [
{
"name": "AGILE методологія розробки програмного забезпечення (Авторський курс компаніїї SoftServe)",
"teacher": "Шевело Олексій Павлович",
"link": "https://softserveinc.zoom.us/j/5653825777",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Linux",
"teacher": "Хмелюк Марина Сергіївна",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Основи Front-end технологій",
"teacher": "Жереб К. А.",
"link": "https://us04web.zoom.us/j/75914252554?pwd=UfuOlnUQvBcvLZshcYxdGvWqX8wS5o.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Розробка мобільних застосувань під iOS",
"teacher": "Храмченко Микола Сергійович",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розроблення застосунків з використанням Spring Framework",
"teacher": "Букасов Максим Михайлович",
"link": "https://us04web.zoom.us/j/5331536558?pwd=RGZaV0Y4VkZnVVRCYjlscjhrTGNZdz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технологія блокчейн",
"teacher": "Яланецький Валерій Анатолійович",
"link": "https://us02web.zoom.us/j/9728575328?pwd=ZVo5aHRuWFZhTURIU05KRHA0QUh2dz09%D1%94",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"12:20": [
{
"name": "Методи та технології штучного інтелекту",
"teacher": "Шимкович Володимир Миколайович",
"link": "https://us02web.zoom.us/j/3428560060?pwd=YTZ4Vm8xVTYzTGhzQk5ONGpTcmVSZz09",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Комп’ютерна графіка та мультимедіа",
"teacher": "Родіонов Павло Юрійович",
"link": "https://meet.google.com/nfs-jejb-xxd",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Технології Computer Vision",
"teacher": "Баран Данило Романович",
"link": "https://us05web.zoom.us/j/85185500969?pwd=ou3boCOzuwE49ufLdXFIPx2ZqTdyTa.1",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Життєвий цикл розробки програмного забезпечення",
"teacher": "Альбрехт Йосип Омелянович",
"link": "https://us04web.zoom.us/j/79545386791?pwd=Mq5xRkZbAo2EYWijnxTWeqrmgTYqYZ.1",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Розробка програмного забезпечення на платформі Java",
"teacher": "Ковальчук Олександр Миронович",
"link": "https://meet.google.com/ddt-vznu-hos",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Технології та засоби розробки комп'ютерної графіки та мультимедіа",
"teacher": "Хмелюк Марина Сергіївна",
"link": "https://us04web.zoom.us/j/9240595434?pwd=UzFFWlFndWw0Sk1mTWJJeFdIOVljdz09",
"type": "lab",
"selectable": true,
"nolink": false
}
],
"18:30": {
"name": "Технології Computer Vision",
"teacher": "Писарчук О О",
"link": "https://us04web.zoom.us/j/71823185480?pwd=MDN5d1FXNXROaFNJUVhySUdSUVo5UT09",
"type": "lec",
"selectable": true,
"nolink": false
}
},
{
"8:30": {
"name": "Правознавство",
"teacher": "Тихонюк Ольга Володимирівна",
"link": "https://meet.google.com/nyj-ptfp-ihn",
"type": "prac",
"selectable": false,
"nolink": false
},
"10:25": {
"name": "Комп'ютерна схемотехніка",
"teacher": "Нікольський С С",
"link": "https://meet.google.com/njc-uwmf-qrf",
"type": "lab",
"selectable": false,
"nolink": false
},
"12:20": {
"name": "Практичний курс іноземної мови професійного спрямування. Частина 1",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/gqm-pxso-tzm",
"type": "prac",
"selectable": false,
"nolink": false
},
"14:15": {
"name": "Вступ до штучного інтелекту",
"teacher": "Кочура Юрій Петрович",
"link": "https://bbb.ugrid.org/b/yur-871-xvm-0gx",
"type": "prac",
"selectable": true,
"nolink": false
}
},
{
"8:30": [
{
"name": "Мова програмування Java",
"teacher": "Орленко С. П.",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розробка програмного забезпечення на платформі Node.JS",
"teacher": "Нечай Дмитро Олександрович",
"link": "https://meet.google.com/hpu-mggd-jju",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Системне програмування С і С++",
"teacher": "Ковальов Микола Олександрович",
"link": "https://meet.google.com/wnu-xhbz-amc",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні технології розробки WEB-застосувань мовою програмування PHP",
"teacher": "Ковтунець Олесь Володимирович",
"link": "https://us02web.zoom.us/j/82665901429?pwd=JQFAiXokPcOCYarGFkVJmAHOXRbO7d.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні технології розробки WEB-застосувань на платформі Java",
"teacher": "Іванова Любов Миколаївна",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Технології програмування на С/Embedded (Сертифікатна програма)",
"teacher": "Каплунов Артем Володимирович",
"link": "https://bbb.comsys.kpi.ua/b/art-1k1-ww6-l8x",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": {
"name": "Системне програмування С і С++",
"teacher": "Густера Олег Михайлович",
"link": "(посилання відсутнє!)",
"type": "lab",
"selectable": true,
"nolink": true
},
"12:20": {
"name": "Технології програмування на С/Embedded (Сертифікатна програма)",
"teacher": "Каплунов Артем Володимирович",
"link": "https://bbb.comsys.kpi.ua/b/art-1k1-ww6-l8x",
"type": "lab",
"selectable": true,
"nolink": false
},
"14:15": {
"name": "Розроблення застосунків з використанням Spring Framework",
"teacher": "Нікітін Валерій Андрійович",
"link": "https://us04web.zoom.us/j/73496253590?pwd=4G5hOcm26EJXOKbvSMYxJwaMomqaB6.1",
"type": "lab",
"selectable": true,
"nolink": false
},
"16:10": {
"name": "Технології програмування користувацьких інтерфейсів (Front-end)",
"teacher": "Ковальчук Олександр Миронович",
"link": "https://meet.google.com/bwc-nscd-who",
"type": "lab",
"selectable": true,
"nolink": false
},
"18:30": {
"name": "Сучасні технології розробки WEB-застосувань на платформі Microsoft.NET",
"teacher": "Крамар Юлія Михайлівна",
"link": "https://teams.microsoft.com/l/meetup-join/19%3Ameeting_MDc2NDQzODItN2UxMS00OGZjLTgyOTktZDAyMDk1ODZlODIy%40thread.v2/0?context=%7B%22Tid%22%3A%22b41b72d0-4e9f-4c26-8a69-f949f367c91d%22%2C%22Oid%22%3A%22800fb5c4-7af0-4ee6-971b-4fbab595029e%22%7D",
"type": "lec",
"selectable": true,
"nolink": false
}
},
{},
{},
{
},
{
"8:30": {
"name": "Архітектура комп'ютерів. Частина 2. Процесори",
"teacher": "Клименко Ірина Анатоліївна",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-7ds-r3u-otz/join",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "<a href=\"https://us02web.zoom.us/j/5274433531?pwd=dXkvanJ1OThaWjBXd2RPR0svU2JtUT09\">додаткове посилання (Zoom)</a>"
},
"10:25": {
"name": "Паралельне програмування",
"teacher": "Корочкін Олександр Володимирович",
"link": "https://bbb.comsys.kpi.ua/rooms/vvf-akd-9bh-uwu/join",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "<a href=\"https://us02web.zoom.us/j/86949818084?pwd=id4SIsb62CKsvkbITjShLYecbX1QSX.1\">додаткове посилання (Zoom)</a>"
},
"12:20": {
"name": "Комп'ютерна схемотехніка",
"teacher": "Ткаченко Валентина Василівна & Старовєров Костянтин Сергійович",
"link": "https://us02web.zoom.us/j/7824097989?pwd=SzVuL1YxM2w1WjBSQ2w0Mnd0V0FYdz09",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "<a href=\"https://us02web.zoom.us/j/5274433531?pwd=dXkvanJ1OThaWjBXd2RPR0svU2JtUT09\">додаткове посилання (Zoom)</a>"
},
"14:15": {
"name": "Технології розроблення серверного програмного забезпечення (Back-end)",
"teacher": "Валько В. .",
"link": "https://meet.google.com/esi-ybgp-xwg",
"type": "lab",
"selectable": true,
"nolink": false
},
"16:10": [
{
"name": "Вступ до штучного інтелекту",
"teacher": "Гордієнко Юрій Григорович",
"link": "https://bbb.comsys.kpi.ua/b/vla-thz-lwo-3uh",
"type": "lec",
"selectable": true,
"nolink": false,
"comment": "<a href=\"https://bbb.ugrid.org/b/vla-thz-lwo-3uh\">резервне посилання (Ugrid)</a>"
},
{
"name": "Технології програмування користувацьких інтерфейсів (Front-end)",
"teacher": "Алещенко Олексій Вадимович",
"link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технології розроблення серверного програмного забезпечення (Back-end)",
"teacher": "Валько В. .",
"link": "https://meet.google.com/esi-ybgp-xwg",
"type": "lec",
"selectable": true,
"nolink": false
}
]
},
{
"8:30": [
{
"name": "Життєвий цикл розробки програмного забезпечення",
"teacher": "Галушко Дмитро Олександрович",
"link": "https://us05web.zoom.us/j/5761967742?pwd=VnpZTW1HdzdVM215Q2I3VTlPS1YxQT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Комп’ютерна графіка та мультимедіа",
"teacher": "Родіонов Павло Юрійович",
"link": "https://meet.google.com/nfs-jejb-xxd",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Методи та технології штучного інтелекту",
"teacher": "Шимкович Володимир Миколайович",
"link": "https://us02web.zoom.us/j/3428560060?pwd=YTZ4Vm8xVTYzTGhzQk5ONGpTcmVSZz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Розробка програмного забезпечення на платформі Java",
"teacher": "Ковальчук Олександр Миронович",
"link": "https://meet.google.com/ddt-vznu-hos",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технології та засоби розробки комп'ютерної графіки та мультимедіа",
"teacher": "Хмелюк Марина Сергіївна",
"link": "https://us04web.zoom.us/j/9240595434?pwd=UzFFWlFndWw0Sk1mTWJJeFdIOVljdz09",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": [
{
"name": "AGILE методологія розробки програмного забезпечення (Авторський курс компаніїї SoftServe)",
"teacher": "Шевело Олексій Павлович",
"link": "https://softserveinc.zoom.us/j/5653825777",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Linux",
"teacher": "Хмелюк Марина Сергіївна",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Основи Front-end технологій",
"teacher": "Жереб К. А.",
"link": "https://us04web.zoom.us/j/75914252554?pwd=UfuOlnUQvBcvLZshcYxdGvWqX8wS5o.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Розробка мобільних застосувань під iOS",
"teacher": "Храмченко Микола Сергійович",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розроблення застосунків з використанням Spring Framework",
"teacher": "Букасов Максим Михайлович",
"link": "https://us04web.zoom.us/j/5331536558?pwd=RGZaV0Y4VkZnVVRCYjlscjhrTGNZdz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технологія блокчейн",
"teacher": "Яланецький Валерій Анатолійович",
"link": "https://us02web.zoom.us/j/9728575328?pwd=ZVo5aHRuWFZhTURIU05KRHA0QUh2dz09%D1%94",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"12:20": [
{
"name": "Основи Front-end технологій",
"teacher": "Жереб К. А.",
"link": "https://us04web.zoom.us/j/75914252554?pwd=UfuOlnUQvBcvLZshcYxdGvWqX8wS5o.1",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Технологія блокчейн",
"teacher": "Яланецький Валерій Анатолійович",
"link": "https://us02web.zoom.us/j/9728575328?pwd=ZVo5aHRuWFZhTURIU05KRHA0QUh2dz09%D1%94",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Linux",
"teacher": "Хмелюк Марина Сергіївна",
"link": "(посилання відсутнє!)",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Розробка мобільних застосувань під iOS",
"teacher": "Храмченко Микола Сергійович",
"link": "(посилання відсутнє!)",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "AGILE методологія розробки програмного забезпечення (Авторський курс компаніїї SoftServe)",
"teacher": "Шевело Олексій Павлович",
"link": "https://softserveinc.zoom.us/j/5653825777",
"type": "lab",
"selectable": true,
"nolink": false
}
],
"18:30": {
"name": "Технології Computer Vision",
"teacher": "Писарчук О О",
"link": "https://us04web.zoom.us/j/71823185480?pwd=MDN5d1FXNXROaFNJUVhySUdSUVo5UT09",
"type": "lec",
"selectable": true,
"nolink": false
}
},
{
"8:30": {
"name": "Архітектура комп'ютерів. Частина 2. Процесори",
"teacher": "Каплунов Артем Володимирович",
"link": "(посиланя відсутнє!)",
"type": "lab",
"selectable": false,
"nolink": true
},
"10:25": {
"name": "Паралельне програмування",
"teacher": "Корочкін Олександр Володимирович",
"link": "https://bbb.comsys.kpi.ua/rooms/vvf-akd-9bh-uwu/join",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "<a href=\"https://us02web.zoom.us/j/86949818084?pwd=id4SIsb62CKsvkbITjShLYecbX1QSX.1\">додаткове посилання (Zoom)</a>"
},
"12:20": {
"name": "Практичний курс іноземної мови професійного спрямування. Частина 1",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/gqm-pxso-tzm",
"type": "prac",
"selectable": false,
"nolink": false
}
},
{
"8:30": [
{
"name": "Мова програмування Java",
"teacher": "Орленко С. П.",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розробка програмного забезпечення на платформі Node.JS",
"teacher": "Нечай Дмитро Олександрович",
"link": "https://meet.google.com/hpu-mggd-jju",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Системне програмування С і С++",
"teacher": "Ковальов Микола Олександрович",
"link": "https://meet.google.com/wnu-xhbz-amc",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні технології розробки WEB-застосувань мовою програмування PHP",
"teacher": "Ковтунець Олесь Володимирович",
"link": "https://us02web.zoom.us/j/82665901429?pwd=JQFAiXokPcOCYarGFkVJmAHOXRbO7d.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні технології розробки WEB-застосувань на платформі Java",
"teacher": "Іванова Любов Миколаївна",
"link": "(посилання відсутнє!)",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Технології програмування на С/Embedded (Сертифікатна програма)",
"teacher": "Каплунов Артем Володимирович",
"link": "https://bbb.comsys.kpi.ua/b/art-1k1-ww6-l8x",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": [
{
"name": "Сучасні технології розробки WEB-застосувань на платформі Microsoft.NET",
"teacher": "Крамар Юлія Михайлівна",
"link": "(посилання відсутнє!)",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Сучасні технології розробки WEB-застосувань на платформі Java",
"teacher": "Іванова Любов Миколаївна",
"link": "(посилання відсутнє!)",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Сучасні технології розробки WEB-застосувань мовою програмування PHP",
"teacher": "Ковтунець Олесь Володимирович",
"link": "https://us02web.zoom.us/j/82665901429?pwd=JQFAiXokPcOCYarGFkVJmAHOXRbO7d.1",
"type": "lab",
"selectable": true,
"nolink": false
}
],
"12:20": {
"name": "Розробка програмного забезпечення на платформі Node.JS",
"teacher": "Нечай Дмитро Олександрович",
"link": "https://meet.google.com/hpu-mggd-jju",
"type": "lab",
"selectable": true,
"nolink": false
},
"18:30": {
"name": "Сучасні технології розробки WEB-застосувань на платформі Microsoft.NET",
"teacher": "Крамар Юлія Михайлівна",
"link": "https://teams.microsoft.com/l/meetup-join/19%3Ameeting_MDc2NDQzODItN2UxMS00OGZjLTgyOTktZDAyMDk1ODZlODIy%40thread.v2/0?context=%7B%22Tid%22%3A%22b41b72d0-4e9f-4c26-8a69-f949f367c91d%22%2C%22Oid%22%3A%22800fb5c4-7af0-4ee6-971b-4fbab595029e%22%7D",
"type": "lec",
"selectable": true,
"nolink": false
}
},
{},
{}
]
@@ -0,0 +1,113 @@
[
{
"11:00": {
"name": "Комп'ютерні мережі",
"teacher": "Кулаков Юрій Олексійович",
"link": "https://us02web.zoom.us/j/3650838587?pwd=6he7zSms1SIKs82FME8PubaRsNaSRi.1",
"type": "con",
"selectable": false,
"nolink": false
}
},
{
"9:00": {
"name": "Комп'ютерні мережі",
"teacher": "Кулаков Юрій Олексійович",
"link": "https://us02web.zoom.us/j/3650838587?pwd=6he7zSms1SIKs82FME8PubaRsNaSRi.1",
"type": "lab",
"selectable": false,
"nolink": false
}
},
{
},
{
"11:00": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "con",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
}
},
{
"9:00": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
},
"10:30": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
},
"12:00": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
},
"13:30": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
},
"15:00": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
},
"16:30": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
}
},
{},
{},
{
},
{
},
{
},
{
"8:30": {
"name": "Архітектура комп'ютерів. Частина 3. Мікропроцесорні засоби",
"teacher": "Ткаченко Валентина Василівна",
"link": "https://bbb.comsys.kpi.ua/rooms/bfc-khu-2lk-5jr/join",
"type": "lab",
"selectable": false,
"nolink": false
}
},
{
},
{},
{}
]
@@ -0,0 +1,625 @@
[
{
},
{
"8:30": {
"name": "Архітектура комп'ютерів. Частина 3. Мікропроцесорні засоби",
"teacher": "Ткаченко Валентина Василівна",
"link": "https://bbb.comsys.kpi.ua/rooms/bfc-khu-2lk-5jr/join",
"type": "lec",
"selectable": false,
"nolink": false
},
"10:25": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://bbb.comsys.kpi.ua/b/and-722-eja",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "\nАльт.1: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>\nАльт.2: <a href=\"https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09\">Zoom</a> (609 193 9855, пароль 112233)"
},
"12:20": {
"name": "Комп'ютерні мережі",
"teacher": "Кулаков Юрій Олексійович",
"link": "https://us02web.zoom.us/j/3650838587?pwd=6he7zSms1SIKs82FME8PubaRsNaSRi.1",
"type": "lec",
"selectable": false,
"nolink": false
},
"14:15": {
"name": "Комп'ютерні мережі",
"teacher": "Кулаков Юрій Олексійович",
"link": "https://us02web.zoom.us/j/3650838587?pwd=6he7zSms1SIKs82FME8PubaRsNaSRi.1",
"type": "lec",
"selectable": false,
"nolink": false
},
"16:10": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
}
},
{
"8:30": [
{
"name": "Аналіз даних з використанням мови Python",
"teacher": "Тимофєєва Юлія Сергіївна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Мультипарадигменне програмування",
"teacher": "Баклан Ігор Всеволодович",
"link": "https://us02web.zoom.us/j/89628393166?pwd=culVuydQG2rrZBZ2EydFIAYJTSbYut.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Основи Back-end технологій",
"teacher": "Голубєв Леонтій Петрович",
"link": "https://us04web.zoom.us/j/3844029757?pwd=aURtZm0zRTFTVFM3UzNCWlhHZTVUdz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Розробка мобільних застосувань під Android",
"teacher": "Орленко Сергій Петрович",
"link": "https://zoom.us/j/3331875592?pwd=bXFWMTVnR1hLOGVjb1lYTDRiMUlxUT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Системне мислення",
"teacher": "Головатенко Ілля Анатолійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Сучасні технології розробки та управління життєвим циклом ПЗ",
"teacher": "Губський Андрій .",
"link": "https://us04web.zoom.us/j/71473232130?pwd=AhaHUr1CvI4bRcHWcVOxFT6AQMO5yX.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технології програмування на ПЛІС (FPGA) (Сертифікатна програма)",
"teacher": "Гайдай . .",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-plu-lpe-z7l/join",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": [
{
"name": "DevOps: cтратегії розгортання програмного забезпечення",
"teacher": "Волокита Артем Миколайович",
"link": "https://bbb.comsys.kpi.ua/rooms/wj4-9xj-3wr-gaw/join",
"type": "lec",
"selectable": true,
"nolink": false,
"comment": "Пароль: bb7md2"
},
{
"name": "WEB – орієнтовані технології. Основи Frontend та Backend розробок",
"teacher": "Проскура Світлана Леонідівна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Робота з даними в хмарних середовищах",
"teacher": "Ахаладзе Антон Елдарійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розподілені інформаційні системи",
"teacher": "Болдак Андрій Олександрович",
"link": "https://us04web.zoom.us/j/5439063374?pwd=VG1iODU0WmpCNTlCVXJJTitYU2Nmdz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні операційні системи",
"teacher": "Ковтунець Олесь Володимирович",
"link": "https://meet.google.com/tuh-yhsq-vth",
"type": "lec",
"selectable": true,
"nolink": false,
"comment": "\nАльт.1: <a href=\"https://us02web.zoom.us/j/5249202812?pwd=ci96MGpqNG1yU3B2aXdMbzcrWU1ndz09\">Zoom</a> (524 920 2812, пароль 447412)"
},
{
"name": "Штучний інтелект в задачах обробки зображень",
"teacher": "Онищенко В В",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
],
"12:20": [
{
"name": "DevOps: cтратегії розгортання програмного забезпечення",
"teacher": "Обозний Дмитро Миколайович",
"link": "https://bbb.comsys.kpi.ua/rooms/ntt-l74-s80-qb2/join",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні операційні системи",
"teacher": "Бабич Богдан Борисович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
}
],
"14:15": {
"name": "Розподілені інформаційні системи",
"teacher": "Болдак Андрій Олександрович",
"link": "https://us04web.zoom.us/j/5439063374?pwd=VG1iODU0WmpCNTlCVXJJTitYU2Nmdz09",
"type": "lab",
"selectable": true,
"nolink": false
},
"16:10": {
"name": "Технології програмування на ПЛІС (FPGA) (Сертифікатна програма)",
"teacher": "Гайдай . .",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-plu-lpe-z7l/join",
"type": "lab",
"selectable": true,
"nolink": false
}
},
{
"8:30": [
{
"name": "Комп’ютерна графіка та мультимедіа",
"teacher": "Родіонов Павло Юрійович",
"link": "https://meet.google.com/xga-ozed-ujt",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Обробка та аналіз текстових даних на Python",
"teacher": "Тимофєєва Юлія Сергіївна",
"link": "https://us02web.zoom.us/j/9470737287?pwd=endFbkJ6d0Izb1Z6K0Y1R1VQL1poUT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні технології розробки WEB-застосувань з використанням мови Python",
"teacher": "Барбарук Віктор Михайлович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Управління IT-інфраструктурними проектами (Сертифікатна програма, авторський курс компанії Global Logic)",
"teacher": "Міщенко Людмила Дмитрівна",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-9si-id4-qid/join",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": {
"name": "Управління IT-інфраструктурними проектами (Сертифікатна програма, авторський курс компанії Global Logic)",
"teacher": "Міщенко Людмила Дмитрівна",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-9si-id4-qid/join",
"type": "lab",
"selectable": true,
"nolink": false
},
"14:15": {
"name": "Практичний курс іноземної мови професійного спрямування. Частина 1",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/gqm-pxso-tzm",
"type": "prac",
"selectable": false,
"nolink": false
},
"18:00": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "con",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
}
},
{
"16:10": {
"name": "Криміналістика в програмно-орієнтованих системах",
"teacher": "Бойко О. В.",
"link": "https://us02web.zoom.us/j/5725059495?pwd=SHAzL1kwTmcyYm1PdkdzNVNLNUZ6dz09",
"type": "lec",
"selectable": true,
"nolink": false
}
},
{},
{},
{
},
{
"8:30": {
"name": "Архітектура комп'ютерів. Частина 3. Мікропроцесорні засоби",
"teacher": "Ткаченко Валентина Василівна",
"link": "https://bbb.comsys.kpi.ua/rooms/bfc-khu-2lk-5jr/join",
"type": "lec",
"selectable": false,
"nolink": false
},
"10:25": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://bbb.comsys.kpi.ua/b/and-722-eja",
"type": "lec",
"selectable": false,
"nolink": false,
"comment": "\nАльт.1: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>\nАльт.2: <a href=\"https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09\">Zoom</a> (609 193 9855, пароль 112233)"
},
"12:20": {
"name": "Комп'ютерні мережі",
"teacher": "Кулаков Юрій Олексійович",
"link": "https://us02web.zoom.us/j/3650838587?pwd=6he7zSms1SIKs82FME8PubaRsNaSRi.1",
"type": "lec",
"selectable": false,
"nolink": false
},
"14:15": {
"name": "Архітектура комп'ютерів. Частина 3. Мікропроцесорні засоби",
"teacher": "Гайдай . .",
"link": "",
"type": "lab",
"selectable": false,
"nolink": true
},
"16:10": {
"name": "Комп'ютерні мережі",
"teacher": "Алєнін О. І.",
"link": "https://us04web.zoom.us/j/4122071690?pwd=ijlo0oGNkM10MtGluijxxeleAa9KJO.1",
"type": "lab",
"selectable": false,
"nolink": false,
"comment": "Zoom Meeting ID 412 207 1690, Passcode labs2025"
}
},
{
"8:30": [
{
"name": "Аналіз даних з використанням мови Python",
"teacher": "Тимофєєва Юлія Сергіївна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Мультипарадигменне програмування",
"teacher": "Баклан Ігор Всеволодович",
"link": "https://us02web.zoom.us/j/89628393166?pwd=culVuydQG2rrZBZ2EydFIAYJTSbYut.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Основи Back-end технологій",
"teacher": "Голубєв Леонтій Петрович",
"link": "https://us04web.zoom.us/j/3844029757?pwd=aURtZm0zRTFTVFM3UzNCWlhHZTVUdz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Розробка мобільних застосувань під Android",
"teacher": "Орленко Сергій Петрович",
"link": "https://zoom.us/j/3331875592?pwd=bXFWMTVnR1hLOGVjb1lYTDRiMUlxUT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Системне мислення",
"teacher": "Головатенко Ілля Анатолійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Сучасні технології розробки та управління життєвим циклом ПЗ",
"teacher": "Губський Андрій .",
"link": "https://us04web.zoom.us/j/71473232130?pwd=AhaHUr1CvI4bRcHWcVOxFT6AQMO5yX.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Технології програмування на ПЛІС (FPGA) (Сертифікатна програма)",
"teacher": "Гайдай . .",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-plu-lpe-z7l/join",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": [
{
"name": "DevOps: cтратегії розгортання програмного забезпечення",
"teacher": "Волокита Артем Миколайович",
"link": "https://bbb.comsys.kpi.ua/rooms/wj4-9xj-3wr-gaw/join",
"type": "lec",
"selectable": true,
"nolink": false,
"comment": "Пароль: bb7md2"
},
{
"name": "WEB – орієнтовані технології. Основи Frontend та Backend розробок",
"teacher": "Проскура Світлана Леонідівна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Робота з даними в хмарних середовищах",
"teacher": "Ахаладзе Антон Елдарійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розподілені інформаційні системи",
"teacher": "Болдак Андрій Олександрович",
"link": "https://us04web.zoom.us/j/5439063374?pwd=VG1iODU0WmpCNTlCVXJJTitYU2Nmdz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні операційні системи",
"teacher": "Ковтунець Олесь Володимирович",
"link": "https://meet.google.com/tuh-yhsq-vth",
"type": "lec",
"selectable": true,
"nolink": false,
"comment": "\nАльт.1: <a href=\"https://us02web.zoom.us/j/5249202812?pwd=ci96MGpqNG1yU3B2aXdMbzcrWU1ndz09\">Zoom</a> (524 920 2812, пароль 447412)"
},
{
"name": "Штучний інтелект в задачах обробки зображень",
"teacher": "Онищенко В В",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
],
"12:20": [
{
"name": "WEB – орієнтовані технології. Основи Frontend та Backend розробок",
"teacher": "Проскура Світлана Леонідівна",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Штучний інтелект в задачах обробки зображень",
"teacher": "Нікітін Валерій Андрійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
}
],
"14:15": [
{
"name": "Аналіз даних з використанням мови Python",
"teacher": "Тимофєєва Юлія Сергіївна",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Мультипарадигменне програмування",
"teacher": "Очеретяний Олександр Костянтинович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Сучасні технології розробки та управління життєвим циклом ПЗ",
"teacher": "Губський Андрій .",
"link": "https://us04web.zoom.us/j/71473232130?pwd=AhaHUr1CvI4bRcHWcVOxFT6AQMO5yX.1",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Основи Back-end технологій",
"teacher": "Зубко Роман Анатолійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Системне мислення",
"teacher": "Головатенко Ілля Анатолійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Розробка мобільних застосувань під Android",
"teacher": "Орленко Сергій Петрович",
"link": "https://zoom.us/j/3331875592?pwd=bXFWMTVnR1hLOGVjb1lYTDRiMUlxUT09",
"type": "lab",
"selectable": true,
"nolink": false
}
]
},
{
"8:30": [
{
"name": "Комп’ютерна графіка та мультимедіа",
"teacher": "Родіонов Павло Юрійович",
"link": "https://meet.google.com/xga-ozed-ujt",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Обробка та аналіз текстових даних на Python",
"teacher": "Тимофєєва Юлія Сергіївна",
"link": "https://us02web.zoom.us/j/9470737287?pwd=endFbkJ6d0Izb1Z6K0Y1R1VQL1poUT09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Сучасні технології розробки WEB-застосувань з використанням мови Python",
"teacher": "Барбарук Віктор Михайлович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Управління IT-інфраструктурними проектами (Сертифікатна програма, авторський курс компанії Global Logic)",
"teacher": "Міщенко Людмила Дмитрівна",
"link": "https://bbb.comsys.kpi.ua/rooms/iry-9si-id4-qid/join",
"type": "lec",
"selectable": true,
"nolink": false
}
],
"10:25": {
"name": "Сучасні технології розробки WEB-застосувань з використанням мови Python",
"teacher": "Барбарук Віктор Михайлович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
"12:20": [
{
"name": "Обробка та аналіз текстових даних на Python",
"teacher": "Тимофєєва Юлія Сергіївна",
"link": "https://us02web.zoom.us/j/9470737287?pwd=endFbkJ6d0Izb1Z6K0Y1R1VQL1poUT09",
"type": "lab",
"selectable": true,
"nolink": false
},
{
"name": "Комп’ютерна графіка та мультимедіа",
"teacher": "Родіонов Павло Юрійович",
"link": "https://meet.google.com/xga-ozed-ujt",
"type": "lab",
"selectable": true,
"nolink": false
}
],
"14:15": {
"name": "Практичний курс іноземної мови професійного спрямування. Частина 1",
"teacher": "Шевченко Ольга Миколаївна",
"link": "https://meet.google.com/gqm-pxso-tzm",
"type": "prac",
"selectable": false,
"nolink": false
},
"18:00": {
"name": "Системне програмне забезпечення",
"teacher": "Сімоненко Андрій Валерійович",
"link": "https://us05web.zoom.us/j/6091939855?pwd=S2p5aEZSQlhKanJWZURRcDR0YkZ6UT09",
"type": "con",
"selectable": false,
"nolink": false,
"comment": "\nZoom: 609 193 9855, пароль 112233\nАльт.1: <a href=\"https://bbb.comsys.kpi.ua/b/and-722-eja\">Big Blue Button</a>\nАльт.2: <a href=\"https://meet.google.com/qtq-hfws-aqk\">Google Meet</a>"
}
},
{
"12:20": {
"name": "Криміналістика в програмно-орієнтованих системах",
"teacher": "Бойко О. В.",
"link": "https://us02web.zoom.us/j/5725059495?pwd=SHAzL1kwTmcyYm1PdkdzNVNLNUZ6dz09",
"type": "lab",
"selectable": true,
"nolink": false
},
"16:10": [
{
"name": "Криміналістика в програмно-орієнтованих системах",
"teacher": "Бойко О. В.",
"link": "https://us02web.zoom.us/j/5725059495?pwd=SHAzL1kwTmcyYm1PdkdzNVNLNUZ6dz09",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Архітектура комп'ютерів. Частина 3. Мікропроцесорні засоби",
"teacher": "Кондратенко Д. Ю.",
"link": "https://bbb.comsys.kpi.ua/rooms/bfc-khu-2lk-5jr/join",
"type": "prac",
"selectable": true,
"nolink": false
}
]
},
{},
{}
]
@@ -0,0 +1,664 @@
[
{
"8:30": [
{
"name": "Інженерна комп'ютерна графіка",
"teacher": "Поліщук Михайло Миколайович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Основи WEB – технологій",
"teacher": "Голубєв Леонтій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Основи комп’ютерного моделювання",
"teacher": "Селіванов Віктор Левович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Системи управління мережами",
"teacher": "Жураковський Богдан Юрійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Системи цифрової обробки сигналів і зображень",
"teacher": "Сергієнко Анатолій Михайлович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Створення інформаційних систем (ІС) на базі Low-code платформ",
"teacher": "Новінський Валерій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Тестування та контроль якості (QA) вбудованих систем (Сертифікатна програма ESI&IoT з компанією Global Logic)",
"teacher": "Клименко Ірина Анатоліївна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
],
"10:25": [
{
"name": "Менеджмент в продуктовому ІТ",
"teacher": "Марченко Олена Іванівна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Методи та інструменти продуктової аналітики (авторський курс компанії Genesis)",
"teacher": "Жураковська Оксана Сергіївна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Методи та інструменти продуктової аналітики (авторський курс компанії Genesis)",
"teacher": "Гавриленко Олена Валеріївна",
"link": "https://us02web.zoom.us/j/78265010473?pwd=GIpJrrNyyCQ2IqsVi2dezWM0cGacIh.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Методи чисельної оптимізації",
"teacher": "Кочура Юрій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Проектування мікропроцесорних систем на базі Arduino та Raspberry PI",
"teacher": "Голубєв Леонтій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розробка програмного забезпечення. Проєктний та програмний менеджмент",
"teacher": "Селіванов Віктор Левович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
],
"12:20": [
{
"name": "Аналіз та обробка часових рядів (Time Series) (Сертифікатна програма Data Science із Sigma Software)",
"teacher": "Писарчук Олексій Олександрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Кібербезпека комп'ютерних мереж",
"teacher": "Миронов Дмитро Вікторович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Проектування вбудованих систем",
"teacher": "Гордієнко Нікіта Юрійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Протоколи і алгоритми електронного голосування",
"teacher": "Полторак Вадим Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розроблення VR/AR застосунків",
"teacher": "Амонс Олександр Анатолійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Технології інтернет речей",
"teacher": "Жураковський Богдан Юрійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
]
},
{
"8:30": {
"name": "Комп'ютерні системи",
"teacher": "Русанова Ольга Веніаминівна",
"link": "",
"type": "lec",
"selectable": false,
"nolink": true
},
"10:25": {
"name": "Комп'ютерні системи",
"teacher": "Русанова Ольга Веніаминівна",
"link": "",
"type": "lec",
"selectable": false,
"nolink": true
},
"12:20": {
"name": "Економіка і організація виробництва",
"teacher": "Семенченко Наталія Віталіївна",
"link": "",
"type": "lec",
"selectable": false,
"nolink": true
},
"14:15": {
"name": "БЖД та цивільний захист",
"teacher": "Праховнік Наталія Артурівна",
"link": "https://us04web.zoom.us/j/76287180346?pwd=GF5kv1VfxpUZa16fonXAvMW5H1qAqE.1",
"type": "lec",
"selectable": false,
"nolink": false
},
"18:30": {
"name": "Практичний курс іноземної мови професійного спрямування. Частина 2",
"teacher": "Срібна Олеся Валеріївна",
"link": "",
"type": "prac",
"selectable": false,
"nolink": true
}
},
{
"8:30": [
{
"name": "Аналіз та обробка часових рядів (Time Series) (Сертифікатна програма Data Science із Sigma Software)",
"teacher": "Туганських Олександр Антонович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Кібербезпека комп'ютерних мереж",
"teacher": "Зенів Ірина Онуфріївна",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Розроблення VR/AR застосунків",
"teacher": "Амонс Олександр Анатолійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
}
],
"10:25": {
"name": "Технології інтернет речей",
"teacher": "Омельченко Віталій Вікторович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
"12:20": [
{
"name": "Менеджмент в продуктовому ІТ",
"teacher": "Марченко Олена Іванівна",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Методи та інструменти продуктової аналітики (авторський курс компанії Genesis)",
"teacher": "Мягкий Михайло Юрійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Розробка програмного забезпечення. Проєктний та програмний менеджмент",
"teacher": "Дремов Артем Кирилович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
}
],
"16:10": {
"name": "Проектування мікропроцесорних систем на базі Arduino та Raspberry PI",
"teacher": "Голубєв Леонтій Петрович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
}
},
{
"8:30": {
"name": "БЖД та цивільний захист",
"teacher": "Праховнік Наталія Артурівна",
"link": "https://us04web.zoom.us/j/76287180346?pwd=GF5kv1VfxpUZa16fonXAvMW5H1qAqE.1",
"type": "prac",
"selectable": false,
"nolink": false
},
"10:25": {
"name": "Комп'ютерні системи",
"teacher": "Гончаренко Олександр Олексійович",
"link": "",
"type": "lab",
"selectable": false,
"nolink": true
},
"12:20": {
"name": "Програмні засоби проектування та реалізації нейромережевих систем",
"teacher": "Фещенко Кирило Юрійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
"14:15": [
{
"name": "Мобільні комп'ютерні мережі",
"teacher": "Кулаков Юрій Олексійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Програмні засоби проектування та реалізації нейромережевих систем",
"teacher": "Шимкович Володимир Миколайович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
]
},
{},
{},
{},
{
"8:30": [
{
"name": "Інженерна комп'ютерна графіка",
"teacher": "Поліщук Михайло Миколайович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Основи WEB – технологій",
"teacher": "Голубєв Леонтій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Основи комп’ютерного моделювання",
"teacher": "Селіванов Віктор Левович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Системи управління мережами",
"teacher": "Жураковський Богдан Юрійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Системи цифрової обробки сигналів і зображень",
"teacher": "Сергієнко Анатолій Михайлович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Створення інформаційних систем (ІС) на базі Low-code платформ",
"teacher": "Новінський Валерій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Тестування та контроль якості (QA) вбудованих систем (Сертифікатна програма ESI&IoT з компанією Global Logic)",
"teacher": "Клименко Ірина Анатоліївна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
],
"10:25": [
{
"name": "Менеджмент в продуктовому ІТ",
"teacher": "Марченко Олена Іванівна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Методи та інструменти продуктової аналітики (авторський курс компанії Genesis)",
"teacher": "Жураковська Оксана Сергіївна",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Методи та інструменти продуктової аналітики (авторський курс компанії Genesis)",
"teacher": "Гавриленко Олена Валеріївна",
"link": "https://us02web.zoom.us/j/78265010473?pwd=GIpJrrNyyCQ2IqsVi2dezWM0cGacIh.1",
"type": "lec",
"selectable": true,
"nolink": false
},
{
"name": "Методи чисельної оптимізації",
"teacher": "Кочура Юрій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Проектування мікропроцесорних систем на базі Arduino та Raspberry PI",
"teacher": "Голубєв Леонтій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розробка програмного забезпечення. Проєктний та програмний менеджмент",
"teacher": "Селіванов Віктор Левович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
],
"12:20": [
{
"name": "Аналіз та обробка часових рядів (Time Series) (Сертифікатна програма Data Science із Sigma Software)",
"teacher": "Писарчук Олексій Олександрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Кібербезпека комп'ютерних мереж",
"teacher": "Миронов Дмитро Вікторович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Проектування вбудованих систем",
"teacher": "Гордієнко Нікіта Юрійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Протоколи і алгоритми електронного голосування",
"teacher": "Полторак Вадим Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Розроблення VR/AR застосунків",
"teacher": "Амонс Олександр Анатолійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Технології інтернет речей",
"teacher": "Жураковський Богдан Юрійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
],
"14:15": [
{
"name": "Інженерна комп'ютерна графіка (*)",
"teacher": "Поліщук Михайло Миколайович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Основи WEB – технологій (*)",
"teacher": "Голубєв Леонтій Петрович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Системи управління мережами (*)",
"teacher": "Жураковський Богдан Юрійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
]
},
{
"8:30": {
"name": "Мобільні комп'ютерні мережі",
"teacher": "Алєнін Олег Ігорович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
"10:25": {
"name": "Комп'ютерні системи",
"teacher": "Русанова Ольга Веніаминівна",
"link": "",
"type": "lec",
"selectable": false,
"nolink": true
},
"12:20": {
"name": "Економіка і організація виробництва",
"teacher": "Семенченко Наталія Віталіївна",
"link": "",
"type": "lec",
"selectable": false,
"nolink": true
},
"18:30": {
"name": "Практичний курс іноземної мови професійного спрямування. Частина 2",
"teacher": "Срібна Олеся Валеріївна",
"link": "",
"type": "prac",
"selectable": false,
"nolink": true
}
},
{
"8:30": [
{
"name": "Інженерна комп'ютерна графіка",
"teacher": "Степанов Андрій Сергійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Основи WEB – технологій",
"teacher": "Голубєв Леонтій Петрович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Основи комп’ютерного моделювання",
"teacher": "Морозов-Леонов Олександр Святославович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Проектування вбудованих систем",
"teacher": "Гордієнко Нікіта Юрійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Системи управління мережами",
"teacher": "Нікітін Валерій Андрійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Системи цифрової обробки сигналів і зображень",
"teacher": "Сергієнко Анатолій Михайлович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Створення інформаційних систем (ІС) на базі Low-code платформ",
"teacher": "Новінський Валерій Петрович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
{
"name": "Тестування та контроль якості (QA) вбудованих систем (Сертифікатна програма ESI&IoT з компанією Global Logic)",
"teacher": "Міщенко Людмила Дмитрівна",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
}
],
"10:25": {
"name": "Протоколи і алгоритми електронного голосування",
"teacher": "Нестерук Андрій Олександрович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
"12:20": {
"name": "Методи чисельної оптимізації",
"teacher": "Кочура Юрій Петрович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
}
},
{
"8:30": {
"name": "Економіка і організація виробництва",
"teacher": "Саченко Андрій Олегович",
"link": "",
"type": "prac",
"selectable": false,
"nolink": true
},
"10:25": {
"name": "Програмні засоби проектування та реалізації нейромережевих систем",
"teacher": "Фещенко Кирило Юрійович",
"link": "",
"type": "lab",
"selectable": true,
"nolink": true
},
"14:15": [
{
"name": "Мобільні комп'ютерні мережі",
"teacher": "Кулаков Юрій Олексійович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
},
{
"name": "Програмні засоби проектування та реалізації нейромережевих систем",
"teacher": "Шимкович Володимир Миколайович",
"link": "",
"type": "lec",
"selectable": true,
"nolink": true
}
]
},
{},
{},
{}
]
+1
View File
@@ -0,0 +1 @@
schedule-v2-term7.json
@@ -1 +0,0 @@
../auto-schedule-pro/schedule.json
@@ -0,0 +1 @@
<b>Коментар</b>: %COMMENT%
@@ -0,0 +1,2 @@
<i>%PROGRESS_BAR%</i>
<b><u>%DATE%</u></b>:
@@ -0,0 +1 @@
<b><u>%DATE%</u></b>:
@@ -0,0 +1 @@
<b><a href="%LINK%">%COLOR_CODE% %NAME%</a></b>
@@ -0,0 +1,3 @@
<b>%NAME_PREFIX%</b>: %NAME% (%TYPE%)
<b>Викладач</b>: %TEACHER%
<b>Посилання</b>: %LINK%
@@ -0,0 +1,4 @@
<b>%NAME_PREFIX%</b>: %NAME% (%TYPE%)
<b>Дата</b>: %DATE% <i>%PROGRESS_BAR%</i>
<b>Викладач</b>: %TEACHER%
<b>Посилання</b>: %LINK%
@@ -0,0 +1 @@
Коментар: %COMMENT%
@@ -0,0 +1,2 @@
%PROGRESS_BAR%
<u>%DATE%</u>:
@@ -0,0 +1 @@
<u>%DATE%</u>:
@@ -0,0 +1 @@
<a href="%LINK%">%COLOR_CODE% %NAME%</a>
@@ -0,0 +1,3 @@
%NAME_PREFIX%: %NAME% (%TYPE%)
Викладач: %TEACHER%
Посилання: %LINK%
@@ -0,0 +1,4 @@
%NAME_PREFIX%: %NAME% (%TYPE%)
Дата: %DATE% %PROGRESS_BAR%
Викладач: %TEACHER%
Посилання: %LINK%
@@ -0,0 +1 @@
<i>Коментар</i>: %COMMENT%
@@ -0,0 +1,2 @@
<i>%PROGRESS_BAR%</i>
<b><u>%DATE%</u></b>:
@@ -0,0 +1 @@
<b><u>%DATE%</u></b>:
@@ -0,0 +1 @@
<b><a href="%LINK%">%COLOR_CODE% %NAME%</a></b>
@@ -0,0 +1,3 @@
<b>%NAME%</b> (%TYPE%)
<i>Викладач</i>: %TEACHER%
<i>Посилання</i>: %LINK%
@@ -0,0 +1,4 @@
<b>%NAME%</b> (%TYPE%)
<i>Дата</i>: %DATE% <i>%PROGRESS_BAR%</i>
<i>Викладач</i>: %TEACHER%
<i>Посилання</i>: %LINK%
-7
View File
@@ -1,32 +1,25 @@
[
{
"9:00": {"name": "Комп'ютерна логіка (екзамен)", "teacher": "Жабін В. І.", "link": "https://bbb.comsys.kpi.ua/b/val-2vb-o7w-y5y АБО https://bbb.ugrid.org/b/val-osi-lup-ou8"}
},
{
},
{
},
{
"10:25": {"name": "Вища математика (лекція) (інше посилання)", "teacher": "Стаматієва В.", "link": "https://us04web.zoom.us/j/2313886209?pwd=dnZHanV3cU9LUXJBVWYyYVArUFg5dz09"},
"12:20": {"name": "Фізика (лекція)", "teacher": "Русаков В. Ф.", "link": "http://139.162.162.130:12015/", "container_id": "1"}
},
{
"10:25": {"name": "Фізика (практика)", "teacher": "Русаков В. Ф.", "link": "http://139.162.162.130:12015/", "container_id": "1"}
},
{},
{},
{
"16:00": {"name": "Вища математика (лекція)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}
},
{
},
{
},
{
"12:20": {"name": "Фізика (лекція)", "teacher": "Русаков В. Ф.", "link": "http://139.162.162.130:12015/", "container_id": "1"}
},
{
"10:25": {"name": "Фізика (практика)", "teacher": "Русаков В. Ф.", "link": "http://139.162.162.130:12015/", "container_id": "1"}
},
{},
{}
+30 -27
View File
@@ -1,52 +1,55 @@
[
{
"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": "(посилання відсутнє!)"},
"10:25": {"name": "Захист персональних даних: стандарти ЄС та Ради Європи & Психологія & Психологія конфлікту (лекції/практики)", "teacher": "Дубняк М. В. & Волянюк Н. Ю. & Москаленко О. В.", "link": "https://us04web.zoom.us/j/7423381732?pwd=c1pJclU2ZDRUWDgyUE10dmhJUDhiZz09 & https://us04web.zoom.us/j/6762396563?pwd=L1EvTmpFZHBSdkRHUjZyRG95SFl4QT09 & https://zoom.us/j/5175581158?pwd=UlhFY3lBOUUrNG9pclRVNndTNTZzQT09"},
"14:15": {"name": "Основи електронного урядування (лекція)", "teacher": "Чукут Світлана Анатоліївна", "link": "(посилання відсутнє!)"}
},
{
"12:20": {"name": "Англійська мова I (практика)", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"},
"14:15": {"name": "Фізика (лабораторна)", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}
"12:20": {"name": "Інженерія програмного забезпечення (лабораторна)", "teacher": "Васильєва Марія Давидівна", "link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039"},
"14:15": {"name": "Теорія електричних кіл та сигналів (лабораторна)", "teacher": "Лободзинський В. Ю. & Ілліна О. О.", "link": "https://meet.google.com/gwx-sshq-sqb"}
},
{
"8:30": {"name": "Програмування II. Об'єктно-орієнтоване програмування (лабораторна)", "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": "Теорія ймовірності та математична статистика (лекція)", "teacher": "Марковський Олександр Петрович", "link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc"},
"10:25": {"name": "Вступ до операційної системи Linux (лекція)", "teacher": "Роковий Олександр Петрович", "link": "https://bbb.comsys.kpi.ua/b/ole-knq-z9h-pyl"},
"12:20": {"name": "Інженерія програмного забезпечення (лекція)", "teacher": "Васильєва Марія Давидівна", "link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039"}
},
{
"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": "Програмування II. Об'єктно-орієнтоване програмування (лекція)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
"10:25": {"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення (практика)", "teacher": "Стаматієва Вікторія В'ячеславівна", "link": "https://us04web.zoom.us/j/2313886209?pwd=dnZHanV3cU9LUXJBVWYyYVArUFg5dz09"},
"12:20": {"name": "Практичний курс іноземної мови. Частина 2 (практика)", "teacher": "Шевченко Ольга Миколаївна", "link": "https://meet.google.com/tno-cxef-zyi"},
"14:15": {"name": "Соціальна психологія (практика)", "teacher": "Блохіна Ірина Олександрівна", "link": "(посилання відсутнє!)"},
"16:10": {"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"}
"8:30": {"name": "Вступ до філософії (лекція)", "teacher": "Руденко Тамара Петрівна", "link": "https://zoom.us/j/9358038101?pwd=d0pwUHRDY0dxbngrU09PYll6UXpNZz09"},
"10:25": {"name": "Теорія електричних кіл та сигналів (лекція)", "teacher": "Лободзинський Вадим Юрійович", "link": "https://meet.google.com/gwx-sshq-sqb"},
"12:20": {"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення (лекція)", "teacher": "Овчар Раїса Федорівна", "link": "https://us02web.zoom.us/j/84532519615?pwd=eDFRMWtJTkxKcklpa1JUSjFmZHNyUT09"}
},
{},
{},
{
"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"}
"10:25": {"name": "Психологія (практика) & Психологія конфлікту (лекція)", "teacher": "Сербова О. В. & Кононець М. О.", "link": "https://us05web.zoom.us/j/9299459744?pwd=Z3VQdWEvQ0tyc3pMbzl2bHN6Y1VlUT09 & https://zoom.us/j/9953120638?pwd=WGZsYUhPK2hxbUc4YVJmT0lhdysyZz09"},
"12:20": {"name": "Політична наука: конфліктологічний підхід & Захист персональних даних: стандарти ЄС та Ради Європи (практики)", "teacher": "Северинчик О. П. & Самчинська О. А.", "link": "(посилання відсутнє!) & https://us04web.zoom.us/j/72149205587?pwd=Ld2Xj7RORYEwnUYauB5yEbATwwsNan.1"},
"14:15": {"name": "Розумні міста (лекція)", "teacher": "Чукут Світлана Анатоліївна", "link": "https://zoom.us/j/5439919039?pwd=Um8wWHV4ZjZpallCWkpVQ08wZGNzdz09"}
},
{
"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": "Англійська мова I (практика)", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"},
"14:15": {"name": "Фізика (лабораторна)", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}
"10:25": {"name": "Вступ до філософії (практика)", "teacher": "Руденко Тамара Петрівна", "link": "https://zoom.us/j/9358038101?pwd=d0pwUHRDY0dxbngrU09PYll6UXpNZz09"},
"14:15": {"name": "Теорія ймовірності та математична статистика (практика)", "teacher": "Марковський Олександр Петрович", "link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc"}
},
{
"10:25": {"name": "Вища математика (практика)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}
"8:30": {"name": "Теорія ймовірності та математична статистика (лекція)", "teacher": "Марковський Олександр Петрович", "link": "https://bbb.comsys.kpi.ua/b/ole-9ru-7vc"},
"10:25": {"name": "Вступ до операційної системи Linux (лекція)", "teacher": "Роковий Олександр Петрович", "link": "https://bbb.comsys.kpi.ua/b/ole-knq-z9h-pyl"},
"12:20": {"name": "Інженерія програмного забезпечення (лекція)", "teacher": "Васильєва Марія Давидівна", "link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039"},
"14:15": {"name": "Інженерія програмного забезпечення (лекція)", "teacher": "Васильєва Марія Давидівна", "link": "https://do.ipo.kpi.ua/mod/bigbluebuttonbn/view.php?id=171039"}
},
{
"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": "Програмування II. Об'єктно-орієнтоване програмування (лекція)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
"8:30": {"name": "Вступ до операційної системи Linux (лабораторна)", "teacher": "Алєнін Олег Ігорович", "link": "https://us04web.zoom.us/j/4122071690?pwd=bANFi3fk9pWvRu9TSBRGzfxFHuEkZC.1"},
"10:25": {"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення (практика)", "teacher": "Стаматієва Вікторія В'ячеславівна", "link": "https://us04web.zoom.us/j/2313886209?pwd=dnZHanV3cU9LUXJBVWYyYVArUFg5dz09"},
"12:20": {"name": "Практичний курс іноземної мови. Частина 2 (практика)", "teacher": "Шевченко Ольга Миколаївна", "link": "https://meet.google.com/tno-cxef-zyi"},
"14:15": {"name": "Соціальна психологія (лекція) & Розумні міста (практика)", "teacher": "Винославська О. В. & Чукут С. А.", "link": "(посилання відсутнє!) & https://zoom.us/j/5439919039?pwd=Um8wWHV4ZjZpallCWkpVQ08wZGNzdz09"}
},
{
"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": "https://meet.google.com/gwx-sshq-sqb"},
"12:20": {"name": "Вища математика. Частина 3. Ряди. Теорія функцій комплексної змінної. Операційне числення (лекція)", "teacher": "Овчар Раїса Федорівна", "link": "https://us02web.zoom.us/j/84532519615?pwd=eDFRMWtJTkxKcklpa1JUSjFmZHNyUT09"}
},
{},
{}
@@ -0,0 +1,16 @@
{
"s": "Головна сторінка сервера: http://10.1.1.1:12010/",
"ss": "Головна сторінка сервера: http://10.1.1.1:12010/",
"u": "Універсальне посилання: http://10.1.1.1:12025/?d=1",
"c": "Розклад навчального року: http://10.1.1.1:12062/generic/4year-schedule.jpg",
"r": "Записи пар (7 семестр): http://10.1.1.1:12066/cgi/main-full.py",
"d": "Навчальні дисципліни (5-8 семестри): http://10.1.1.1:12022/generic/disciplines-terms5-8.png",
"d1": "Навчальні дисципліни (1-4 семестри): http://10.1.1.1:12022/generic/disciplines-terms1-4.png",
"d2": "Навчальні дисципліни (5-8 семестри): http://10.1.1.1:12022/generic/disciplines-terms5-8.png",
"h": "Стисла довідка:\n!s - головна сторінка сервера\n!u - універсальне посилання\n!r - записи пар (7 семестр)\n!c - календар навчального року\n!d - перелік навчальних дисциплін\n@all [повідомлення] - тег усіх користувачів\nПовна довідка: http://10.1.1.1:12032/generic/bot-help/short-help.html",
"пари_для_артема": "🧐",
"пари_для_артема_хоч_і_не_на_завтра": "🤨",
"перекур": "😮\u200d💨",
"fiot_free_vidrahuvannja": "😢",
"світло": "⚡️"
}
@@ -0,0 +1,6 @@
command_storage = json.loads(open(self.path + "data.json").read())
received_command = self.MESSAGE.text[1:]
if received_command.lower() in command_storage:
self.RESPONSE = command_storage[received_command.lower()]
@@ -0,0 +1,6 @@
{
"version": 1,
"index_file": "index.py",
"start_on_boot": true,
"alias": "generic-command-processor"
}
+5
View File
@@ -0,0 +1,5 @@
Usage: !hardsub [event_name]
Permanently subscribes to [event_name]. If blank, uses "default".
To unsubscribe, use !hardunsub
For one-time subscriptions, use !sub
+5
View File
@@ -0,0 +1,5 @@
Usage: !hardunsub [event_name]
Remove permanent subscription to [event_name]. If blank, uses "default".
To remove one-time subscription, use !unsub
To add permanent subscription, use !hardsub
+5
View File
@@ -0,0 +1,5 @@
Usage:
!schedule-ctl list - see all settings
!schedule-ctl get <setting> - see specific personal setting
!schedule-ctl set <setting> <value> - change <setting> to <value>
!schedule-ctl clear <setting> - restore <setting> to default value
+7
View File
@@ -0,0 +1,7 @@
Usage: !sub [event_name]
Soft-subscribes to [event_name]. If black, uses "default".
If you want to remove soft substription, use !unsub
Soft subscription is automatically removed after the event is triggered once.
If you want to subscribe permanently, use !hardsub
+5
View File
@@ -0,0 +1,5 @@
Usage: !unsub [event_name]
Removes one-time subscription to [event_name]. If blank, uses "default".
Does not affect hard subscriptions. To remove hard subscription, use !hardunsub
To add one-time supscription, use !sub
+54
View File
@@ -0,0 +1,54 @@
import json
import os
module_path = ""
def readfile(filename):
if os.path.exists(module_path + filename):
return open(module_path + filename).read()
else:
return False
def list_entries(search_query):
files = []
for p, d, f in os.walk(module_path + "db/"):
for i in f:
entry_name = f"{p.split('/', 3)[3]}/{i}"
if search_query in entry_name:
files.append(f"{p.split('/', 3)[3]}/{i}".rsplit(".", 1)[0].replace("/", ".").lstrip("."))
files.sort()
return files
def process(message, path):
if message.text[:5] != "!help":
return None, None
global module_path
module_path = path
cmd = message.text[1:].split()
if len(cmd) == 1:
return "Usage:\n```\n!help show <entry> - displays specified manual entry\n!help list [query] - lists out available entries (optionally, filtered by [query])```", "Markdown"
elif cmd[1] == "list":
if len(cmd) == 2:
return "Available entries:\n" + "\n".join(list_entries("")), None
else:
return f"Found entries for {cmd[2]}:\n" + "\n".join(list_entries(cmd[2])), None
elif cmd[1] == "show":
if len(cmd) >= 3:
result = ""
for entry_name in cmd[2:]:
data = readfile("db/" + entry_name.replace(".", "/") + ".txt")
if data:
result += f"Manual page for {entry_name}:\n```\n{data}```\n"
else:
result += f"No manual found for {entry_name}\n\n"
return result, "Markdown"
else:
return "Usage: !help show <entry> - displays specified manual entry", None
+6
View File
@@ -0,0 +1,6 @@
{
"start_on_boot": true,
"alias": "help",
"version": 2,
"index_file": "index.py"
}
+3 -1
View File
@@ -13,4 +13,6 @@ def get_num():
def process(message, path):
if message.text == "!v2-testing":
return f"Testing successful - call number {get_num()}"
return f"Testing successful - call number {get_num()}", None
else:
return None, None
+129
View File
@@ -0,0 +1,129 @@
msg = self.MESSAGE.text.lower()
if msg == "!ping":
current_time = time.time()
delay = current_time - 7200 - float(self.MESSAGE.date.strftime('+%s'))
self.RESPONSE = f"Pong in {delay} seconds"
if not os.path.exists(self.path + "scoreboard/"):
os.mkdir(self.path + "scoreboard/")
def append_score(path, name, data):
open(path + f"scoreboard/{name}", "a").write(data)
user_id = self.MESSAGE.from_user.id
chat_id = self.MESSAGE.chat.id
first_name = self.MESSAGE.from_user.first_name
last_name = self.MESSAGE.from_user.last_name
username = self.MESSAGE.from_user.username
append_score(self.path, self.MESSAGE.from_user.id, f"{current_time} {user_id} {chat_id} {first_name} {last_name} {username} {delay}\n")
elif msg == "!pong":
current_time = time.time()
delay = current_time - 7200 - float(self.MESSAGE.date.strftime('+%s'))
self.RESPONSE = f"Ping in {delay} seconds"
if not os.path.exists(self.path + "pong-scoreboard/"):
os.mkdir(self.path + "pong-scoreboard/")
def append_score(path, name, data):
open(path + f"pong-scoreboard/{name}", "a").write(data)
user_id = self.MESSAGE.from_user.id
chat_id = self.MESSAGE.chat.id
first_name = self.MESSAGE.from_user.first_name
last_name = self.MESSAGE.from_user.last_name
username = self.MESSAGE.from_user.username
append_score(self.path, self.MESSAGE.from_user.id, f"{current_time} {user_id} {chat_id} {first_name} {last_name} {username} {delay}\n")
elif msg == "!pingtop":
def read_score(path, name):
if os.path.exists(path + f"scoreboard/{name}"):
return open(path + f"scoreboard/{name}").read()
else:
return None
if not os.path.exists(self.path + "scoreboard/"):
os.mkdir(self.path + "scoreboard/")
results = []
for name in os.listdir(self.path + "scoreboard/"):
data = [i for i in read_score(self.path, name).split("\n") if i != ""]
data.sort(key = lambda x: float(x.split()[6]))
results.append(data[0].split())
print(results)
results.sort(key = lambda x: float(x[6]))
self.RESPONSE = "<u>Ping top</u>:\n" + "\n".join( [f"{i+1}. {v[3]} {v[4]} ({v[5]}) - {v[6]}" for i, v in enumerate(results[:10])] )
self.FORMAT = "HTML"
elif msg == "!pongtop":
def read_score(path, name):
if os.path.exists(path + f"pong-scoreboard/{name}"):
return open(path + f"pong-scoreboard/{name}").read()
else:
return None
if not os.path.exists(self.path + "pong-scoreboard/"):
os.mkdir(self.path + "pong-scoreboard/")
results = []
for name in os.listdir(self.path + "pong-scoreboard/"):
data = [i for i in read_score(self.path, name).split("\n") if i != ""]
data.sort(key = lambda x: float(x.split()[6]))
results.append(data[0].split())
print(results)
results.sort(key = lambda x: float(x[6]))
self.RESPONSE = "<u>Pong top</u>:\n" + "\n".join( [f"{i+1}. {v[3]} {v[4]} ({v[5]}) - {v[6]}" for i, v in enumerate(results[:10])] )
self.FORMAT = "HTML"
elif msg == "!pingantitop":
def read_score(path, name):
if os.path.exists(path + f"scoreboard/{name}"):
return open(path + f"scoreboard/{name}").read()
else:
return None
if not os.path.exists(self.path + "scoreboard/"):
os.mkdir(self.path + "scoreboard/")
results = []
for name in os.listdir(self.path + "scoreboard/"):
data = [i for i in read_score(self.path, name).split("\n") if i != ""]
data.sort(key = lambda x: float(x.split()[6]))
results.append(data[-1].split())
print(results)
results.sort(key = lambda x: float(x[6]))
results = results[::-1]
self.RESPONSE = "<u>Ping antitop</u>:\n" + "\n".join( [f"{i+1}. {v[3]} {v[4]} ({v[5]}) - {v[6]}" for i, v in enumerate(results[:10])] )
self.FORMAT = "HTML"
elif msg == "!pongantitop":
def read_score(path, name):
if os.path.exists(path + f"pong-scoreboard/{name}"):
return open(path + f"pong-scoreboard/{name}").read()
else:
return None
if not os.path.exists(self.path + "pong-scoreboard/"):
os.mkdir(self.path + "pong-scoreboard/")
results = []
for name in os.listdir(self.path + "pong-scoreboard/"):
data = [i for i in read_score(self.path, name).split("\n") if i != ""]
data.sort(key = lambda x: float(x.split()[6]))
results.append(data[-1].split())
print(results)
results.sort(key = lambda x: float(x[6]))
results = results[::-1]
self.RESPONSE = "<u>Pong antitop</u>:\n" + "\n".join( [f"{i+1}. {v[3]} {v[4]} ({v[5]}) - {v[6]}" for i, v in enumerate(results[:10])] )
self.FORMAT = "HTML"
+6
View File
@@ -0,0 +1,6 @@
{
"start_on_boot": true,
"alias": "pingtools",
"version": 1,
"index_file": "index.py"
}
+8
View File
@@ -0,0 +1,8 @@
{
"trigger_lists": [
["fiot", "free", "sex"],
["fict", "free", "sex"],
["fice", "free", "sex"]
],
"response_text": "👀"
}
+107
View File
@@ -0,0 +1,107 @@
import random
module_path = ""
def extract_separators(text):
sequence_buf = ""
seps = []
for i in text:
if i in ["\n", " "]:
sequence_buf += i
elif sequence_buf:
seps.append(sequence_buf)
sequence_buf = ""
return seps
def process(message, path):
if not message.text.lower().startswith("!shuf"):
return "", None
global module_path
module_path = path
cmd = message.text.split()
print(cmd)
l = len(cmd)
# settings
split_by = "word"
shuf_individual_words = False
data_source = "reply"
only_spaces = False
shuf_data = []
i = 1
# parsing arguments
while i < l:
print("C", i, cmd[i])
if cmd[i][0] != "-" or cmd[i] == "--":
break
elif cmd[i] == "-i":
shuf_individual_words = True
elif cmd[i] == "-c":
split_by = "char"
elif cmd[i] == "-o":
only_spaces = True
i += 1
# parsing text (if any)
while i < l:
print("T", i, cmd[i])
data_source = "internal"
if split_by == "char":
for c in cmd[i]:
shuf_data.append(c)
shuf_data.append(" ")
elif split_by == "word":
if shuf_individual_words:
shuf_data.append(list(cmd[i]))
else:
shuf_data.append(cmd[i])
i += 1
if data_source == "reply":
seps = extract_separators(message['reply_to_message'].text)
else:
seps = extract_separators(message.text)
if data_source == "reply":
for w in message['reply_to_message'].text.split():
if split_by == "char":
for c in w:
shuf_data.append(c)
elif split_by == "word":
if shuf_individual_words:
shuf_data.append(list(w))
else:
shuf_data.append(w)
if split_by == "word":
if shuf_individual_words:
for w in shuf_data:
random.shuffle(w)
if only_spaces:
return " ".join(["".join(w) for w in shuf_data]), "HTML"
else:
return "".join([i[0] + i[1] for i in zip(["".join(w) for w in shuf_data], seps)]) + "".join(shuf_data[-1]), "HTML"
else:
random.shuffle(shuf_data)
if only_spaces:
return " ".join(shuf_data), "HTML"
else:
return "".join([i[0] + i[1] for i in zip(shuf_data, seps)]) + shuf_data[-1], "HTML"
elif split_by == "char":
if only_spaces:
shuf_data += [" " for i in seps]
else:
shuf_data += seps
random.shuffle(shuf_data)
return "".join(shuf_data), "HTML"
+6
View File
@@ -0,0 +1,6 @@
{
"start_on_boot": true,
"alias": "shuffle",
"version": 2,
"index_file": "index.py"
}
+133
View File
@@ -0,0 +1,133 @@
import os
import json
def setup():
for i in ["sub-storage"]:
if not os.path.exists(module_path + i):
os.mkdir(module_path + i)
def load_group(group_name):
if os.path.exists(module_path + f"sub-storage/{group_name}.json"):
return json.loads(open(module_path + f"sub-storage/{group_name}.json").read())
else:
return {"hard": [], "soft": []}
def save_group(group_name, existing_group):
with open(module_path + f"sub-storage/{group_name}.json", "w") as f:
f.write(json.dumps(existing_group))
def sub_to_group(group_name, tag, persistence = "soft"):
for i in ["..", "/", "\\"]:
if i in group_name:
return False
existing_group = load_group(group_name)
if tag not in existing_group[persistence]:
existing_group[persistence].append(tag)
save_group(group_name, existing_group)
return True
def unsub_from_group(group_name, tag, persistence = "soft"):
for i in ["..", "/", "\\"]:
if i in group_name:
return False
existing_group = load_group(group_name)
if tag in existing_group[persistence]:
existing_group[persistence].remove(tag)
save_group(group_name, existing_group)
return True
def get_group(cmd):
if len(cmd) == 1:
return "default"
else:
return cmd[1]
def clear_subs_in(group_name, category = "soft"):
existing_group = load_group(group_name)
existing_group[category] = []
save_group(group_name, existing_group)
module_path = ""
setup()
def process(message, path):
global module_path
module_path = path
if not message.text[0] == "!":
return "", None
msg = message.text.lower()
cmd = [i for i in msg[1:].split(" ", 2) if i]
chosen_group_name = get_group(cmd)
if cmd[0] == "sub":
if message.from_user.username:
if sub_to_group(chosen_group_name, message.from_user.username):
return f"Subscribed {message.from_user.username} to the {chosen_group_name} event", None
else:
return f"Failed to subscribe {message.from_user.username} to the \"{chosen_group_name}\" event (event name violation)", None
else:
return f"Failed to subscribe {message.from_user.id} to the \"{chosen_group_name}\" event (no username available)", None
if cmd[0] == "hardsub":
if message.from_user.username:
if sub_to_group(chosen_group_name, message.from_user.username, persistence = "hard"):
return f"Hard-subscribed {message.from_user.username} to the {chosen_group_name} event", None
else:
return f"Failed to hard-subscribe {message.from_user.username} to the \"{chosen_group_name}\" event (event name violation)", None
else:
return f"Failed to hard-subscribe {message.from_user.id} to the \"{chosen_group_name}\" event (no username available)", None
elif cmd[0] == "unsub":
if message.from_user.username:
if unsub_from_group(chosen_group_name, message.from_user.username):
return f"Unsubscribed {message.from_user.username} from the {chosen_group_name} event", None
else:
return f"Failed to unsubscribe {message.from_user.username} from the \"{chosen_group_name}\" event (event name violation)", None
else:
return f"Failed to unsubscribe {message.from_user.id} from the \"{chosen_group_name}\" event (no username available)", None
elif cmd[0] == "hardunsub":
if message.from_user.username:
if unsub_from_group(chosen_group_name, message.from_user.username, persistence = "hard"):
return f"Unsubscribed {message.from_user.username} from the {chosen_group_name} event", None
else:
return f"Failed to unsubscribe {message.from_user.username} from the \"{chosen_group_name}\" event (event name violation)", None
else:
return f"Failed to unsubscribe {message.from_user.id} from the \"{chosen_group_name}\" event (no username available)", None
elif cmd[0] == "call":
group_data = load_group(chosen_group_name)
tags = set()
for subs in group_data.values():
tags |= set([f"@{i}" for i in subs if i])
ping_string = " ".join(tags)
clear_subs_in(chosen_group_name)
if len(cmd) == 3:
return f"{message.from_user.username} calls \"{chosen_group_name}\": {cmd[2]}\n{ping_string}", None
else:
return f"{message.from_user.username} calls \"{chosen_group_name}\"\n{ping_string}", None
elif cmd[0] == "sublist":
group_data = load_group(chosen_group_name)
responce = f"Subscribers for group \"{chosen_group_name}\":\n"
for name, subs in group_data.items():
responce += f"{name}: {', '.join(subs)}\n"
return responce, None
+6
View File
@@ -0,0 +1,6 @@
{
"start_on_boot": true,
"alias": "tag-sub",
"version": 2,
"index_file": "index.py"
}
+1 -1
View File
@@ -22,7 +22,7 @@ if (command[0] in self.aliases) and (1 <= command_length <= 3):
"target": target,
"format": "text"}
res = requests.post("http://127.0.0.1:5000/translate", data = data)
res = requests.post("http://10.1.1.1:5010/translate", data = data)
result = json.loads(res.text)
if source == "auto":
+38 -24
View File
@@ -1,31 +1,45 @@
command = self.MESSAGE['text'].split(" ", 2)
command_length = len(command)
def escaped_string(unescaped_string):
result_string = str(unescaped_string)
escaping_rules = {
"<": "&lt;",
">": "&gt;",
'"': "&quot;"
}
for i in escaping_rules.items():
result_string = result_string.replace(i[0], i[1])
return result_string
if (command[0] in self.aliases) and (1 <= command_length <= 3):
try:
models = json.loads(readfile(self.path + "translate_models.json"))
models = json.loads(readfile(self.path + "translate_models.json"))
if command_length == 1:
chosen_model = "cz-ua"
else:
chosen_model = command[1]
if command_length == 1:
chosen_model = "cz-ua"
else:
chosen_model = command[1]
if command_length == 3:
text_to_decode = command[2]
else:
text_to_decode = self.MESSAGE['reply_to_message']['text']
decoded_text = text_to_decode
if chosen_model not in models:
self.RESPONSE = f"Такого варіанту транслітерації не існує. Доступні варіанти: " \
f"{', '.join(list(models.keys()))}"
else:
for i in models[chosen_model]:
decoded_text = decoded_text.replace(i[0], i[1])
decoded_text = decoded_text.replace(i[0].capitalize(), i[1].capitalize())
decoded_text = decoded_text.replace(i[0].upper(), i[1].upper())
self.RESPONSE = f"Результат: {decoded_text}"
if command_length == 3:
text_to_decode = command[2]
else:
if self.MESSAGE['reply_to_message'].caption:
text_to_decode = self.MESSAGE['reply_to_message'].caption
elif self.MESSAGE['reply_to_message'].text:
text_to_decode = self.MESSAGE['reply_to_message'].text
except Exception as e:
print(f"[translit-decoder] Got exception: {e}")
decoded_text = text_to_decode
if chosen_model not in models:
self.RESPONSE = f"Такого варіанту транслітерації не існує. Доступні варіанти: " \
f"{', '.join(list(models.keys()))}"
else:
for i in models[chosen_model]:
decoded_text = decoded_text.replace(i[0].lower(), i[1].lower())
decoded_text = decoded_text.replace(i[0].capitalize(), i[1].capitalize())
decoded_text = decoded_text.replace(i[0].upper(), i[1].upper())
self.RESPONSE = f"<b><u>Результат</u></b>\n{escaped_string(decoded_text)}"
self.FORMAT = "HTML"
@@ -75,5 +75,100 @@
["$", ";"],
["^", ":"],
["&", "?"]
],
"ua-en-direct": [
["й", "q"],
["ц", "w"],
["у", "e"],
["к", "r"],
["е", "t"],
["н", "y"],
["г", "u"],
["ш", "i"],
["щ", "o"],
["з", "p"],
["х", "["],
["ї", "]"],
["ф", "a"],
["і", "s"],
["в", "d"],
["а", "f"],
["п", "g"],
["р", "h"],
["о", "j"],
["л", "k"],
["д", "l"],
["ж", ";"],
["Ж", ":"],
["Є", "\""],
["є", "'"],
["я", "z"],
["ч", "x"],
["с", "c"],
["м", "v"],
["и", "b"],
["т", "n"],
["ь", "m"],
[",", "?"],
[".", "/"],
["\"", "@"],
["№", "#"],
[";", "$"],
[":", "^"],
["?", "&"],
["б", ","],
["ю", "."]
],
"en-men": [
["a", "4"],
["b", "8"],
["c", "("],
["d", "|)"],
["e", "3"],
["f", "|="],
["g", "6"],
["h", "#"],
["i", "!"],
["j", "|_"],
["k", "|<"],
["l", "1"],
["m", "//N"],
["o", "0"],
["p", "|D"],
["q", "(,)"],
["r", "|2"],
["s", "5"],
["t", "7"],
["u", "|_|"],
["w", "//"],
["v", "/"],
["x", "><"],
["y", "`/"]
],
"men-en": [
["4", "a"],
["8", "b"],
["(,)", "q"],
["(", "c"],
["|)", "d"],
["3", "e"],
["|=", "f"],
["6", "g"],
["#", "h"],
["!", "i"],
["|_|", "u"],
["|_", "j"],
["|<", "k"],
["1", "l"],
["//N", "m"],
["0", "o"],
["|D", "p"],
["|2", "r"],
["5", "s"],
["7", "t"],
["//", "w"],
["`/", "y"],
["/", "v"],
["><", "x"]
]
}
+124
View File
@@ -0,0 +1,124 @@
import re
''' Grammar reference
all_possible_match_strings = [
"силка", "силки",
"силки", "силок",
"силці", "силкам",
"силку", "силки",
"силкою", "силками",
"силці", "силках",
"силко", "силки",
"лінк", "лінка", "лінки",
"лінку", "лінки", "лінок",
"лінку", "лінці", "лінкам",
"лінк", "лінку", "лінки",
"лінком", "лінкою", "лінками",
"лінку", "лінці", "лінках",
"лінке", "лінко", "лінки"
]
'''
EXTRACT_PADDING = 11
EXTRACT_INCLUDE_WHOLE_WORDS = True
corrections = [ # IDs
"посилання", # 0
"посиланню", # 1
"посиланням", # 2
"на посиланні", # 3
"посилань", # 4
"посиланнями", # 5
"посиланнях" # 6
]
replacements = [
["силка", "силки", "силку", "силко",
"лінк", "лінка", "лінки", "лінку", "лінке", "лінко"],
["силці",
"лінку", "лінці"],
["силкам", "силкою",
"лінкам", "лінком", "лінкою"],
["на силці",
"на лінку", "на лінці"],
["силок",
"лінок"],
["силками",
"лінками"],
["силках",
"лінках"]
]
#unique_match_strings = set(all_possible_match_strings)
#ua_alphabet = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя"
#regex_matchers = [re.compile(fr"((?<=[^{ua_alphabet}])|(?<=\b)|(?<=^)|(?<= )){i}((?=[^{ua_alphabet}])|(?=\b)|(?=$)|(?= ))", re.DEBUG)
# for i in unique_match_strings]
ua_alphabet = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя"
for i, group in enumerate(replacements):
for j, match_word in enumerate(group):
#replacements[i][j] = re.compile(fr"((?<=[^{ua_alphabet}])|(?<=\b)|(?<=^)|(?<= )){i}((?=[^{ua_alphabet}])|(?=\b)|(?=$)|(?= ))")
replacements[i][j] = [match_word, re.compile(fr"((?<=[^{ua_alphabet}])|(?<=\b)|(?<=^)|(?<= )){match_word}((?=[^{ua_alphabet}])|(?=\b)|(?=$)|(?= ))")]
#print(replacements[i][j])
#_ = [print(fr"(?<=[^абвгґдеєжзиіїйклмнопрстуфхцчшщьюя]){i}(?=[^абвгґдеєжзиіїйклмнопрстуфхцчшщьюя])") for i in unique_match_strings]
def process(message, path):
lowercase_message = message.text.lower()
for correct_word_id, group in enumerate(replacements):
for match_word, matcher in group:
result = matcher.search(lowercase_message)
if result:
l = len(message.text)
mistake_start = result.start()
mistake_end = result.end()
print(mistake_start, mistake_end)
original_text_before = message.text[max(mistake_start-EXTRACT_PADDING,0):mistake_start]
original_text_after = message.text[mistake_end:min(mistake_end+EXTRACT_PADDING,l)]
original_text_mistake = message.text[mistake_start:mistake_end]
if EXTRACT_INCLUDE_WHOLE_WORDS:
while 0 <= mistake_start - EXTRACT_PADDING - 1 < l and \
message.text[mistake_start-EXTRACT_PADDING-1].isalnum():
mistake_start -= 1
original_text_before = message.text[max(mistake_start-EXTRACT_PADDING,0):result.start()]
while 0 <= mistake_end + EXTRACT_PADDING < l and \
message.text[mistake_end+EXTRACT_PADDING].isalnum():
mistake_end += 1
original_text_after = message.text[result.end():min(mistake_end+EXTRACT_PADDING,l)]
if len(message.text[:mistake_start]) > EXTRACT_PADDING:
original_text_before_continue = "..."
else:
original_text_before_continue = ""
if len(message.text[mistake_end:]) > EXTRACT_PADDING:
original_text_after_continue = "..."
else:
original_text_after_continue = ""
original_extract = original_text_before_continue + original_text_before \
+ original_text_mistake + original_text_after + original_text_after_continue
correct_word = corrections[correct_word_id]
if original_text_mistake == match_word.capitalize():
correct_word = corrections[correct_word_id].capitalize()
elif original_text_mistake == match_word.upper():
correct_word = corrections[correct_word_id].upper()
fixed_extract = original_text_before_continue + original_text_before \
+ correct_word + original_text_after + original_text_after_continue
return f'"{original_extract}" -> "{fixed_extract}" 🌚', None
else:
return "", None
@@ -0,0 +1,6 @@
{
"start_on_boot": false,
"alias": "troll-spelling-corrector",
"version": 2,
"index_file": "index.py"
}