From a8b15eeb2551ebd9a8a526013ec4e6c90e58166b Mon Sep 17 00:00:00 2001 From: Rykov7 Date: Mon, 22 Aug 2022 18:57:09 +0300 Subject: [PATCH] add manual reminder, decorate remind() in reminder.py --- app/bot.py | 16 +++++++++++++--- app/reminder.py | 21 ++++++++++----------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/bot.py b/app/bot.py index 36764f5..556e5e1 100644 --- a/app/bot.py +++ b/app/bot.py @@ -126,16 +126,26 @@ def command_me(message): @bot.message_handler(commands=['remind']) -def remind_manually(): +def remind_manually(message): """Remind manually""" - reminder.remind() + args = message.text.split() + if len(args) > 1: + try: + today = dt.strptime(args[1], "%m-%d-%Y") + except ValueError as ve: + bot.send_message(message.chat.id, f"Не удалось распарсить дату!\n{ve}", parse_mode='HTML') + else: + reminder.remind(message.chat.id, today) + else: + bot.send_message(message.chat.id, f"Справка\nФормат даты: MM-DD-YYYY\n" + f"Пример: /remind 02-14-2022", parse_mode='HTML') @bot.message_handler(commands=['jobs']) def list_jobs(message): """List all jobs""" if message.chat.id == ADMIN_ID: - text = reminder.get_jobs() + text = reminder.print_get_jobs() bot.send_message(message.chat.id, text, parse_mode='HTML') diff --git a/app/reminder.py b/app/reminder.py index 6b5a132..c090fec 100644 --- a/app/reminder.py +++ b/app/reminder.py @@ -1,4 +1,4 @@ -import schedule +from schedule import repeat, every, get_jobs, run_pending import time from threading import Thread from datetime import datetime as dt @@ -12,34 +12,33 @@ from .config import PYTHONCHATRU, bot def scheduler(): while True: - schedule.run_pending() + run_pending() time.sleep(120) -def remind(): +@repeat(every().day.at('06:00')) +def remind(chat_to_repeat=PYTHONCHATRU, today=dt.today()): """ Remind holiday. """ with open('holidays.csv', newline='', encoding='utf-8') as holidays_file: - holidays = tuple(csv.reader(holidays_file)) - today = dt.today() - for entry in holidays[1:]: + holidays = tuple(csv.reader(holidays_file))[1:] + for entry in holidays: date, holiday, description = entry date = dt.strptime(date, "%m-%d-%Y") if today.month == date.month and today.day == date.day: - notification = f'🎉💻 Сегодня {date:%d.%m}, {holiday.upper()}!\ + notification = f'🎉💻 Сегодня {holiday.upper()}!\ \n\n{description}.' if date.year != 1000: age = today.year - date.year notification += f'\n{age} годовщина' - bot.send_message(PYTHONCHATRU, notification, parse_mode='HTML') # PYTHONCHATRU + bot.send_message(chat_to_repeat, notification, parse_mode='HTML') -def get_jobs(): - all_jobs = schedule.get_jobs() +def print_get_jobs(): + all_jobs = get_jobs() text = f"├ Jobs: {str(len(all_jobs))}\ \n├ {dt.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n" text += '' + str(all_jobs) + '' return text -schedule.every().day.at('06:00').do(remind) Thread(target=scheduler).start()