Изменено: расписан блок ближайшей пары
This commit is contained in:
parent
6158af655c
commit
e50a531abe
43
bot.py
43
bot.py
|
@ -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(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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]:
|
||||||
|
|
|
@ -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=Расписание пустое
|
||||||
|
Либо пары кончились, либо что-то пошло не так
|
|
@ -0,0 +1,14 @@
|
||||||
|
month = (
|
||||||
|
"января",
|
||||||
|
"февраля",
|
||||||
|
"марта",
|
||||||
|
"апреля",
|
||||||
|
"мая",
|
||||||
|
"июня",
|
||||||
|
"июля",
|
||||||
|
"августа",
|
||||||
|
"сентября",
|
||||||
|
"октября",
|
||||||
|
"ноября",
|
||||||
|
"декабря",
|
||||||
|
)
|
Reference in New Issue