modular-bot-framework-for-t.../modules/auto-schedule-pro/index.py

128 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## env approximation ##
'''
import datetime, json, time
class Self:
def __init__(self):
self.path = ""
self.WEEKDAY_NAMES_ROD = ["понеділка", "вівторка", "середи", "четверга", "п'ятниці", "суботи", "неділі"]
self.WEEKDAY_NAMES_ROD_WITH_NEXT = ["наступного понеділка", "наступного вівторка", "наступної середи", "наступного четверга", "наступної п'ятниці", "наступної суботи", "наступної неділі"]
self.WEEKDAY_NAMES_ROD_WITH_THIS = ["цього понеділка", "цього вівторка", "цієї середи", "цього четверга", "цієї п'ятниці", "цієї суботи", "цієї неділі"]
def readfile(path):
return open(path).read()
self = Self()
'''
## code ##
if self.MESSAGE["text"].lower() == "!пара":
current_time = datetime.datetime.now()
current_week = current_time.isocalendar()[1] % 2
current_day = current_time.weekday()
current_seconds = current_week*604800 + current_day*86400 + current_time.hour*3600 + current_time.minute*60 + current_time.second
reference_time = int(current_time.strftime("%s")) - current_seconds
# baking defined schedule
raw_schedule = json.loads( readfile(self.path + "schedule.json") )
schedule = {}
for day in range(len(raw_schedule)):
for i in raw_schedule[day]:
ts = day*86400 + int(i.split(":")[0])*3600 + int(i.split(":")[1])*60
new_item = dict(raw_schedule[day][i])
new_item["source"] = "schedule"
schedule[ts] = new_item
# baking additions (extra pairs)
raw_additions = json.loads( readfile(self.path + "additions.json") )
additions = {}
for day in range(len(raw_additions)):
for i in raw_additions[day]:
ts = day*86400 + int(i.split(":")[0])*3600 + int(i.split(":")[1])*60
new_item = dict(raw_additions[day][i])
new_item["source"] = "additions"
schedule[ts] = new_item
full_schedule = dict(list(schedule.items()) + list(additions.items()))
print("test1")
print(f"Full schedule printout: {full_schedule}")
print(f"Current delta_time: {current_seconds}")
p = None
next_pair_time = None
key_list = list(full_schedule.keys())
key_list.sort()
for i in key_list:
if i > current_seconds - 5400:
p = full_schedule[i]
next_pair_time = i
break
print("test2")
if next_pair_time == None:
if len(full_schedule.keys()) > 0:
print("test3.1")
actual_pair_ts = reference_time + min(full_schedule.keys())
dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
p = full_schedule[min(full_schedule.keys())]
print("test3.1.1")
print("{} == 6 && {} == 1, {}".format(current_day, dt_pair.strftime('%u'), str( ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")) )))
human_readable_date = ""
if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
human_readable_date += "завтра "
elif current_week != int(dt_pair.strftime("%W")) % 2:
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_NEXT[int(dt_pair.strftime("%u")) - 1])
elif current_day != (int(dt_pair.strftime("%u")) - 1):
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_THIS[int(dt_pair.strftime("%u")) - 1])
else:
human_readable_date += "сьогодні "
print("test3.1.2")
if int(dt_pair.strftime("%H")) == 11:
human_readable_date += "об "
else:
human_readable_date += "о "
print("test3.1.3")
human_readable_date += dt_pair.strftime("%H:%M")
print("test3.1.4")
self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
print("test3.1.5")
else:
self.RESPONCE = "Пар немає взагалі. Ми вільні!"
else:
print("test3.2")
actual_pair_ts = reference_time + next_pair_time
dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
print(f"Debug: selected pair at {next_pair_time}")
print(f"{current_day} == 6 && {dt_pair.strftime('%u')} == 1")
human_readable_date = ""
if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
human_readable_date += "завтра "
elif current_week != int(dt_pair.strftime("%W")) % 2:
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_NEXT[int(dt_pair.strftime("%u")) - 1])
elif current_day != (int(dt_pair.strftime("%u")) - 1):
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_THIS[int(dt_pair.strftime("%u")) - 1])
else:
human_readable_date += "сьогодні "
if int(dt_pair.strftime("%H")) == 11:
human_readable_date += "об "
else:
human_readable_date += "о "
human_readable_date += dt_pair.strftime("%H:%M")
self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])