Изменено: расписан блок ближайшей пары

This commit is contained in:
far-galaxy 2023-02-05 18:16:39 +03:00
parent 6158af655c
commit e50a531abe
4 changed files with 86 additions and 20 deletions

43
bot.py
View File

@ -2,11 +2,13 @@ from database.l9 import L9_DB
from database.tg import TG_DB from database.tg import TG_DB
from database.shedule import Shedule_DB from database.shedule import Shedule_DB
from utils.config import * from utils.config import *
from utils.stuff import *
import telegram import telegram
from tg.keyboards import Keyboard from tg.keyboards import Keyboard
import logging import logging
from logging.handlers import TimedRotatingFileHandler as TRFL from logging.handlers import TimedRotatingFileHandler as TRFL
import configparser import configparser
import datetime
logger = logging.getLogger('bot') logger = logging.getLogger('bot')
@ -97,12 +99,45 @@ class Bot:
self.addGroup(l9Id, query) self.addGroup(l9Id, query)
elif query.text == 'Главное меню': elif query.text == 'Главное меню':
near = self.shedule.nearLesson(query.date, l9Id) now = query.date
if near != None: # now = datetime.datetime(2023, 2, 6, 14, 0)
# TODO: прописать другие случаи 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( self.tg.sendMessage(
tgId, 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(), reply_markup=Keyboard.menu(),
) )

View File

@ -3,6 +3,7 @@ from .a_ssau_parser import *
import telegram import telegram
from configparser import ConfigParser from configparser import ConfigParser
import datetime import datetime
from itertools import groupby
class Shedule_DB: class Shedule_DB:
@ -161,15 +162,32 @@ class Shedule_DB:
lessonId = self.db.get( lessonId = self.db.get(
'lessons', 'lessons',
f"(groupId = {groupIds[0][0]}{second_gr}) AND `end` > '{str_time}' " f"(groupId = {groupIds[0][0]}{second_gr}) AND `end` > '{str_time}' "
'ORDER BY `begin` LIMIT 2', 'ORDER BY `begin` LIMIT 4',
['lessonId, begin'], ['lessonId', 'begin'],
) )
if lessonId != []: if lessonId != []:
if len(lessonId) == 2 and lessonId[0][1] == lessonId[1][1]: if len(lessonId) >= 2:
return self.strLesson([lessonId[0][0], lessonId[1][0]]) 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: else:
return self.strLesson([lessonId[0][0]]) pairs = [lessonId[0]]
return pairs
elif not retry: elif not retry:
for groupId in [i for i in groupIds if i[0] > 1000]: for groupId in [i for i in groupIds if i[0] > 1000]:

View File

@ -1,34 +1,33 @@
[etc] [etc]
oops=Ой! oops=Ой!
cancel=Действие отменено cancel=Действие отменено
overlimit=Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено. overlimit=Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено.
К сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢 К сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢
Попробуйте зайти на следующей неделе, когда лимит будет повышен Попробуйте зайти на следующей неделе, когда лимит будет повышен
hello=Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗 hello=Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗
Давай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D) Давай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D)
[group] [group]
connected=Поздравляем, твоя группа %%s, направление "%%s", подключена! connected=Поздравляем, твоя группа %%s, направление "%%s", подключена!
exists=❗️Эта группа у тебя уже подключена exists=❗️Эта группа у тебя уже подключена
error=❗У меня этой группы пока нет, а сайте возникла какая-то ошибка. error=❗У меня этой группы пока нет, а сайте возникла какая-то ошибка.
Попробуйте позже Попробуйте позже
checkShedule:Такой группы у меня пока нет в базе, но она есть на сайте checkShedule:Такой группы у меня пока нет в базе, но она есть на сайте
%%s %%s
Проверь, пожалуйста, что это твоя группа и нажми кнопку Проверь, пожалуйста, что это твоя группа и нажми кнопку
empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :( empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :(
loading=Загружаю расписание... loading=Загружаю расписание...
loaded=Расписание загружено! loaded=Расписание загружено!
nogroup=Возможно, ты написал не ту группу, попробуй снова nogroup=Возможно, ты написал не ту группу, попробуй снова
[shedule] [shedule]
near=Ближайшая пара near=Ближайшая пара
next_days=❗️Сегодня пар нет
Ближайшая пара
tomorrow=завтра
today=Ближайшая пара сегодня
now=Сейчас
next=Далее
next_empty=Далее сегодня ничего не будет
no_shedule=Расписание пустое
Либо пары кончились, либо что-то пошло не так

14
utils/stuff.py Normal file
View File

@ -0,0 +1,14 @@
month = (
"января",
"февраля",
"марта",
"апреля",
"мая",
"июня",
"июля",
"августа",
"сентября",
"октября",
"ноября",
"декабря",
)