open schedule deeplinks in full viewer
This commit is contained in:
parent
d8538de649
commit
4ad160e46d
4 changed files with 42 additions and 13 deletions
|
|
@ -18,7 +18,7 @@ def sendBrokenMessage(message: Message):
|
|||
@bot.message_handler(content_types = ['text'], func = lambda m: m.text == Strings.back_to_home)
|
||||
def returnToDefaultState(message: Message):
|
||||
u = validate(message)
|
||||
if not u.active_target:
|
||||
if not u.active_target and u.state != 'scheduleDeepLink':
|
||||
from bot.schedule.search import open_search
|
||||
|
||||
return open_search(message, u)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,13 @@ from telebot.util import quick_markup
|
|||
import config
|
||||
from models import logger
|
||||
from models.bot import Markup_v1 as Markup, bot, send
|
||||
from models.schedule import ScheduleAPIError, find_main_groups, group_exists, group_target
|
||||
from models.schedule import (
|
||||
ScheduleAPIError,
|
||||
find_main_groups,
|
||||
group_exists,
|
||||
group_target,
|
||||
search_targets,
|
||||
)
|
||||
from models.user import getAllUsers, validate
|
||||
from utils import convert
|
||||
|
||||
|
|
@ -16,15 +22,27 @@ def start(message: Message):
|
|||
user = validate(message)
|
||||
message.text = str(message.text)
|
||||
|
||||
if "_s" in message.text:
|
||||
query = message.text.split(' ')[-1]
|
||||
payload = message.text.split()[-1]
|
||||
if payload.startswith("_s"):
|
||||
query = payload
|
||||
search_target_kind = ({
|
||||
't': 'teacher',
|
||||
'r': 'room',
|
||||
'g': 'group'
|
||||
}).get(query[2:3])
|
||||
if not search_target_kind:
|
||||
return send(message, "Не удалось определить тип расписания по ссылке.")
|
||||
search_query = convert.decode(query[3:])
|
||||
return send(message, f'search: {search_target_kind} - {search_query}')
|
||||
try:
|
||||
results = search_targets(search_target_kind, search_query, limit=10)
|
||||
except ScheduleAPIError as error:
|
||||
logger.error("Schedule", f"[{user.id}] {error}")
|
||||
return send(message, "Сервер расписания сейчас недоступен. Попробуй открыть ссылку позже.")
|
||||
if not results:
|
||||
return send(message, "Это расписание больше не найдено на сервере.")
|
||||
from bot.schedule.search import open_schedule_viewer
|
||||
|
||||
return open_schedule_viewer(message, results[0], from_search=False)
|
||||
|
||||
|
||||
if user.group and "migrate" in message.text:
|
||||
|
|
|
|||
|
|
@ -38,14 +38,18 @@ def open_search(message: Message, user: User | None = None) -> None:
|
|||
)
|
||||
|
||||
|
||||
def open_schedule_viewer(message: Message, target: ScheduleTarget) -> None:
|
||||
def open_schedule_viewer(
|
||||
message: Message, target: ScheduleTarget, from_search: bool = True
|
||||
) -> None:
|
||||
user = validate(message)
|
||||
user.view_target = target
|
||||
user.setState("scheduleSearch")
|
||||
user.setState("scheduleSearch" if from_search else "scheduleDeepLink")
|
||||
send(
|
||||
message,
|
||||
f"<b>{target['name']}</b>\nВыбери нужный день или неделю",
|
||||
reply_markup=Markup.schedule(user.is_saved(target), from_search=True),
|
||||
reply_markup=Markup.schedule(
|
||||
user.is_saved(target), from_search=from_search, include_today=not from_search
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -128,10 +132,12 @@ def search_query(message: Message):
|
|||
|
||||
|
||||
@bot.message_handler(
|
||||
content_types=["text"], func=lambda message: validate(message).state == "scheduleSearch"
|
||||
content_types=["text"],
|
||||
func=lambda message: validate(message).state in {"scheduleSearch", "scheduleDeepLink"},
|
||||
)
|
||||
def search_schedule_viewer(message: Message):
|
||||
user = validate(message)
|
||||
from_search = user.state == "scheduleSearch"
|
||||
target = user.view_target
|
||||
if not target:
|
||||
return open_search(message, user)
|
||||
|
|
@ -141,14 +147,14 @@ def search_schedule_viewer(message: Message):
|
|||
return send(
|
||||
message,
|
||||
f"Расписание <b>{target['name']}</b> сохранено",
|
||||
reply_markup=Markup.schedule(True, from_search=True),
|
||||
reply_markup=Markup.schedule(True, from_search=from_search, include_today=not from_search),
|
||||
)
|
||||
if message.text == Strings.delete:
|
||||
user.remove_schedule(target)
|
||||
return send(
|
||||
message,
|
||||
f"Расписание <b>{target['name']}</b> удалено из сохраненных",
|
||||
reply_markup=Markup.schedule(False, from_search=True),
|
||||
reply_markup=Markup.schedule(False, from_search=from_search, include_today=not from_search),
|
||||
)
|
||||
|
||||
result = render_schedule_action(user, target, message.text or "")
|
||||
|
|
@ -156,5 +162,7 @@ def search_schedule_viewer(message: Message):
|
|||
return send(
|
||||
message,
|
||||
result,
|
||||
reply_markup=Markup.schedule(user.is_saved(target), from_search=True),
|
||||
reply_markup=Markup.schedule(
|
||||
user.is_saved(target), from_search=from_search, include_today=not from_search
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -166,12 +166,15 @@ class Markup_v1:
|
|||
return markup
|
||||
|
||||
@staticmethod
|
||||
def schedule(is_saved: bool, from_search: bool = False) -> ReplyKeyboardMarkup:
|
||||
def schedule(
|
||||
is_saved: bool, from_search: bool = False, include_today: bool = False
|
||||
) -> ReplyKeyboardMarkup:
|
||||
even_week = datetime.datetime.now(ZoneInfo('Europe/Moscow')).isocalendar().week % 2 == 0
|
||||
markup = ReplyKeyboardMarkup(resize_keyboard=True)
|
||||
markup.add(Strings.back_to_search if from_search else Strings.back_to_home, row_width=1)
|
||||
if from_search:
|
||||
markup.add(Strings.delete if is_saved else Strings.save, row_width=1)
|
||||
if from_search or include_today:
|
||||
markup.add(Strings.today, Strings.tomorrow, row_width=2)
|
||||
markup.add(*Strings.weekdays, row_width=5)
|
||||
markup.add(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue