diff --git a/bot.py b/bot.py index e6c519d..61297c7 100644 --- a/bot.py +++ b/bot.py @@ -2,11 +2,13 @@ from database.l9 import L9_DB from database.tg import TG_DB from database.shedule import Shedule_DB from utils.config import * +from utils.stuff import * import telegram from tg.keyboards import Keyboard import logging from logging.handlers import TimedRotatingFileHandler as TRFL import configparser +import datetime logger = logging.getLogger('bot') @@ -97,12 +99,45 @@ class Bot: self.addGroup(l9Id, query) elif query.text == 'Главное меню': - near = self.shedule.nearLesson(query.date, l9Id) - if near != None: - # TODO: прописать другие случаи + now = query.date + # now = datetime.datetime(2023, 2, 6, 14, 0) + pairs = self.shedule.nearLesson(now, l9Id) + if pairs != None: + pair = pairs[0][0][1] + if pair.date() > now.date(): + text = loc['shedule']['next_days'] + day = datetime.timedelta(days=1) + if pair.date() - now.date() == day: + text += f" {loc['shedule']['tomorrow']}:\n" + else: + text += ( + f' {pair.day} {month[pair.month-1]}:\n' + ) + elif pair.time() > now.time(): + text = f"{loc['shedule']['today']}:\n" + else: + text = f"{loc['shedule']['now']}:\n" + text += self.shedule.strLesson( + [p[0] for p in pairs[0]] + ) + + if len(pairs) == 2 and pair.date() == now.date(): + text += f"\n{loc['shedule']['next']}:\n" + text += self.shedule.strLesson( + [p[0] for p in pairs[1]] + ) + elif pair.date() == now.date(): + text += f"\n{loc['shedule']['next_empty']}" + # TODO: Добавить смайликов self.tg.sendMessage( tgId, - f"{loc['shedule']['near']}:\n{near}", + text, + reply_markup=Keyboard.menu(), + ) + else: + self.tg.sendMessage( + tgId, + loc['shedule']['no_shedule'], reply_markup=Keyboard.menu(), ) diff --git a/database/shedule.py b/database/shedule.py index 79085c0..10cf183 100644 --- a/database/shedule.py +++ b/database/shedule.py @@ -3,6 +3,7 @@ from .a_ssau_parser import * import telegram from configparser import ConfigParser import datetime +from itertools import groupby class Shedule_DB: @@ -161,15 +162,32 @@ class Shedule_DB: lessonId = self.db.get( 'lessons', f"(groupId = {groupIds[0][0]}{second_gr}) AND `end` > '{str_time}' " - 'ORDER BY `begin` LIMIT 2', - ['lessonId, begin'], + 'ORDER BY `begin` LIMIT 4', + ['lessonId', 'begin'], ) if lessonId != []: - if len(lessonId) == 2 and lessonId[0][1] == lessonId[1][1]: - return self.strLesson([lessonId[0][0], lessonId[1][0]]) + if len(lessonId) >= 2: + pairs = [ + list(pair) + for begin, pair in groupby( + lessonId, key=lambda d: d[1] + ) + ] + if ( + len(pairs) >= 2 + and pairs[0][0][1].date() != pairs[1][0][1].date() + ): + pairs = [pairs[0]] + elif ( + len(pairs) > 2 + and pairs[0][0][1].date() == pairs[1][0][1].date() + ): + pairs = pairs[:2] else: - return self.strLesson([lessonId[0][0]]) + pairs = [lessonId[0]] + + return pairs elif not retry: for groupId in [i for i in groupIds if i[0] > 1000]: diff --git a/locale/ru.ini b/locale/ru.ini index d5c286a..05f569c 100644 --- a/locale/ru.ini +++ b/locale/ru.ini @@ -1,34 +1,33 @@ [etc] oops=Ой! - cancel=Действие отменено - overlimit=Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено. К сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢 Попробуйте зайти на следующей неделе, когда лимит будет повышен - hello=Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗 Давай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D) [group] connected=Поздравляем, твоя группа %%s, направление "%%s", подключена! - exists=❗️Эта группа у тебя уже подключена - error=❗У меня этой группы пока нет, а сайте возникла какая-то ошибка. Попробуйте позже - checkShedule:Такой группы у меня пока нет в базе, но она есть на сайте %%s Проверь, пожалуйста, что это твоя группа и нажми кнопку - empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :( - loading=Загружаю расписание... - loaded=Расписание загружено! - nogroup=Возможно, ты написал не ту группу, попробуй снова [shedule] -near=Ближайшая пара \ No newline at end of file +near=Ближайшая пара +next_days=❗️Сегодня пар нет + Ближайшая пара +tomorrow=завтра +today=Ближайшая пара сегодня +now=Сейчас +next=Далее +next_empty=Далее сегодня ничего не будет +no_shedule=Расписание пустое + Либо пары кончились, либо что-то пошло не так \ No newline at end of file diff --git a/utils/stuff.py b/utils/stuff.py new file mode 100644 index 0000000..b9c4a46 --- /dev/null +++ b/utils/stuff.py @@ -0,0 +1,14 @@ +month = ( + "января", + "февраля", + "марта", + "апреля", + "мая", + "июня", + "июля", + "августа", + "сентября", + "октября", + "ноября", + "декабря", +)