diff --git a/code/bot.py b/code/bot.py index 27c850e..1dbb350 100644 --- a/code/bot.py +++ b/code/bot.py @@ -79,7 +79,11 @@ async def check_list(message: types.Message): counter += 1 txt += message_form(counter, event[3]) - await message.answer(text=txt, parse_mode=ParseMode.HTML) + if counter: + await message.answer(text=txt, parse_mode=ParseMode.HTML) + else: + await message.answer(text="В данный момент событий на сегодня найдено не было!", + parse_mode=ParseMode.HTML) else: await message.answer("Для отображения событий вы должны прислать ical-ссылку на календарь!") @@ -228,7 +232,6 @@ async def downloading_file_ics(message: types.Message): await message.answer("Время отправки уведомлений должно быть меньше 60 минут!") - # ПРОВЕРКА НА СОБЫТИЕ async def alarm(wait_for): while True: @@ -314,5 +317,5 @@ async def update(wait_for): if __name__ == '__main__': loop = asyncio.get_event_loop() loop.create_task(alarm(60)) # ПРОВЕРКА КАЖДУЮ 1 МИНУТУ - loop.create_task(update(1620)) # ПРОВЕРКА КАЖДУЮ 27 МИНУТУ + loop.create_task(update(780)) # ПРОВЕРКА КАЖДУЮ 13 МИНУТУ executor.start_polling(dp, skip_updates=True) diff --git a/code/script.py b/code/script.py index 5dd7569..5a32f85 100644 --- a/code/script.py +++ b/code/script.py @@ -1,7 +1,6 @@ from datetime import datetime, time import icalendar -from dateutil.relativedelta import * from dateutil.rrule import * from dateutil.parser import * @@ -39,21 +38,23 @@ def text_ical(user_id, tz): r_rule = component.get('rrule') if r_rule: list_rrule = icalendar.vRecur.to_ical(r_rule).decode('utf-8').split(';') + list_rrule = [elem for elem in list_rrule if 'UNTIL' not in elem] - for i, elem in enumerate(list_rrule): - if 'UNTIL' in elem: - list_rrule.pop(i) + until = "UNTIL=" + "".join(date.date().isoformat().split("-")) + "T235900Z" - now_date = "".join(date.date().isoformat().split("-")) - - until = "UNTIL=" + now_date + "T235900Z" - date_iso = "".join(dt_start.isoformat().split("-")) - time_iso = "".join(date_iso.split(":")).split("+")[0] + "Z" list_rrule.append(until) - list_rrule = ";".join(list_rrule) - print(dt_start.date(), list(rrulestr(list_rrule, dtstart=parse(time_iso)))) + date_iso = "".join(dt_start.isoformat().split("-")) + iso = "".join(date_iso.split(":")).split("+")[0] + "Z" + + dates = list(map(lambda x: x.replace(tzinfo=None), list(rrulestr(list_rrule, dtstart=parse(iso))))) + + if dates: + dif = dt_end - dt_start + + dt_start = dates[-1] + dt_end = dt_start + dif if date.date() == dt_start.date(): org = component.get("organizer") @@ -99,50 +100,3 @@ def delta_time(d_event, start, end): def dt_now(tz): return datetime.now(tz=tz) - - -def recur_rule(create_date, now_date, rules): - freq = rules['FREQ'][0] - inter = rules['INTERVAL'][0] - - if 'UNTIL' in rules.keys(): - until = rules['UNTIL'][0] - until = until if type(until) == type(now_date) else until.date() - - if until < now_date: return False - - count_day = now_date - create_date - - print(create_date, rules) - print(freq, inter) - - if freq == 'DAILY': - if count_day.days % inter == 0: return True - - elif freq == 'WEEKLY': - weekday = now_date.strftime('%a').upper()[:2] - days = rules['BYDAY'] - - if weekday in days: - week = count_day.days // 7 # получаем чётность недели - if week % inter == 0: return True - - elif freq == 'MONTHLY': - if 'BYMONTHDAY' in rules.keys(): - dates = list(rrule(MONTHLY, dtstart=create_date, interval=inter, - bymonthday=rules['BYMONTHDAY'][0], until=now_date)) - if now_date in dates: return True - else: - moment = rules['BYDAY'][0][:-2] - day = rules['BYDAY'][0][-2:] - - dates = list(rrule(MONTHLY, dtstart=create_date, interval=inter, - byweekday=day(moment), until=now_date)) - if now_date in dates: return True - - elif freq == 'YEARLY': - dates = list(rrule(YEARLY, dtstart=create_date, interval=inter, bymonth=rules['BYMONTH'][0], - bymonthday=rules['BYMONTHDAY'][0], until=now_date)) - if now_date in dates: return True - - return False