mirror of
https://github.com/EDeev/y.calendarkin.git
synced 2026-06-15 19:01:00 +03:00
v. 1.1
This commit is contained in:
parent
077138687c
commit
ee078546b7
2 changed files with 18 additions and 61 deletions
|
|
@ -79,7 +79,11 @@ async def check_list(message: types.Message):
|
||||||
counter += 1
|
counter += 1
|
||||||
txt += message_form(counter, event[3])
|
txt += message_form(counter, event[3])
|
||||||
|
|
||||||
|
if counter:
|
||||||
await message.answer(text=txt, parse_mode=ParseMode.HTML)
|
await message.answer(text=txt, parse_mode=ParseMode.HTML)
|
||||||
|
else:
|
||||||
|
await message.answer(text="<b>В данный момент</b> событий на сегодня найдено не было!",
|
||||||
|
parse_mode=ParseMode.HTML)
|
||||||
else:
|
else:
|
||||||
await message.answer("Для отображения событий вы должны прислать ical-ссылку на календарь!")
|
await message.answer("Для отображения событий вы должны прислать ical-ссылку на календарь!")
|
||||||
|
|
||||||
|
|
@ -228,7 +232,6 @@ async def downloading_file_ics(message: types.Message):
|
||||||
await message.answer("Время отправки уведомлений должно быть меньше 60 минут!")
|
await message.answer("Время отправки уведомлений должно быть меньше 60 минут!")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ПРОВЕРКА НА СОБЫТИЕ
|
# ПРОВЕРКА НА СОБЫТИЕ
|
||||||
async def alarm(wait_for):
|
async def alarm(wait_for):
|
||||||
while True:
|
while True:
|
||||||
|
|
@ -314,5 +317,5 @@ async def update(wait_for):
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
loop.create_task(alarm(60)) # ПРОВЕРКА КАЖДУЮ 1 МИНУТУ
|
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)
|
executor.start_polling(dp, skip_updates=True)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
from datetime import datetime, time
|
from datetime import datetime, time
|
||||||
import icalendar
|
import icalendar
|
||||||
|
|
||||||
from dateutil.relativedelta import *
|
|
||||||
from dateutil.rrule import *
|
from dateutil.rrule import *
|
||||||
from dateutil.parser import *
|
from dateutil.parser import *
|
||||||
|
|
||||||
|
|
@ -39,21 +38,23 @@ def text_ical(user_id, tz):
|
||||||
r_rule = component.get('rrule')
|
r_rule = component.get('rrule')
|
||||||
if r_rule:
|
if r_rule:
|
||||||
list_rrule = icalendar.vRecur.to_ical(r_rule).decode('utf-8').split(';')
|
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):
|
until = "UNTIL=" + "".join(date.date().isoformat().split("-")) + "T235900Z"
|
||||||
if 'UNTIL' in elem:
|
|
||||||
list_rrule.pop(i)
|
|
||||||
|
|
||||||
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.append(until)
|
||||||
|
|
||||||
list_rrule = ";".join(list_rrule)
|
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():
|
if date.date() == dt_start.date():
|
||||||
org = component.get("organizer")
|
org = component.get("organizer")
|
||||||
|
|
@ -99,50 +100,3 @@ def delta_time(d_event, start, end):
|
||||||
|
|
||||||
def dt_now(tz):
|
def dt_now(tz):
|
||||||
return datetime.now(tz=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
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue