from aiogram import F, Router
from aiogram.types import (Message, ContentType, InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery, FSInputFile)
from aiogram.filters import Command, CommandStart
from scripts import *
from database import *
router = Router()
@router.message(CommandStart())
async def start_handler(msg: Message) -> None:
await msg.answer("Здравствуйте! Этот бот поможет вам добраться до кабинета в структуре корпусов Московского "
"Политехнического Университета. Для начала работы просто пропишите команду /route")
@router.message(Command("help"))
async def help_handler(msg: Message) -> None:
text = "Напомню, что за команды у нас тут есть)\n\n"
text += "/help - Команда помощи, выведет все доступные команды\n\n"
text += "/route - Команда выводит маршрут до введённого кабинета"
await msg.answer(text)
@router.message(Command("route"))
async def route_handler(msg: Message) -> None:
buttons = [[InlineKeyboardButton(text=f"На Большой Семёновской", callback_data="edu:bs")],
[InlineKeyboardButton(text=f"На Павла Корчагина", callback_data="edu:pk")],
[InlineKeyboardButton(text=f"На Прянишкова", callback_data="edu:pr"),
InlineKeyboardButton(text=f"На Михалковской", callback_data="edu:mi")],
[InlineKeyboardButton(text=f"На Автозаводской", callback_data="edu:av")]]
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
await msg.answer(text="Выберите корпус на котором вы хотите проложить маршрут:", reply_markup=keyboard)
@router.callback_query(F.data.startswith("edu:"))
async def route_button(call: CallbackQuery) -> None:
action = call.data.split(":")[1]
user_dict = dict()
user_dict[action] = []
JsonTools(call.from_user.id).save_json(user_dict)
await call.message.edit_text("Укажите до какого кабинет вам необходимо добраться "
"(обязательно напишите кабинет в точности как указано в личном кабинет):")
@router.message(F.content_type == ContentType.TEXT)
async def add_cabinet(msg: Message) -> None:
cab = msg.text.lower()
jsn = JsonTools(msg.from_user.id)
user_dict = jsn.read_json()
edu_keys = list(user_dict.keys())
if ((cab[0] == "м" and len(cab) == 5 and "mi" == edu_keys[0]) or
(cab[:2] == "ав" and len(cab) == 6 and "av" == edu_keys[0]) or
(cab[:2] == "пк" and len(cab) == 6 and "pk" == edu_keys[0]) or
(cab[:2] == "пр" and len(cab) == 6 and "pr" == edu_keys[0]) or
(cab[0] in ["а", "б", "в", "н", "нд"] and "bs" == edu_keys[0])):
lst_routes = get_routes(edu_keys[0], cab)
if lst_routes:
user_dict[edu_keys[0]] = lst_routes
jsn.save_json(user_dict)
buttons = [[InlineKeyboardButton(text=f"От входа на территорию", callback_data="route:build")],
[InlineKeyboardButton(text=f"От входа в корпус", callback_data="route:floor")]]
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
await msg.answer("Кабинет успешно получен, обрабатываем путь! Откуда вам проложить маршрут:", reply_markup=keyboard)
else:
await msg.answer("Обрыв программы по неизвестной причине!")
else:
await msg.answer("Вы скинули не кабинет! Я же вижу)")
@router.callback_query(F.data.startswith("route:"))
async def var_button(call: CallbackQuery) -> None:
action = call.data.split(":")[1]
jsn = JsonTools(call.from_user.id)
user_dict = jsn.read_json()
edu_keys = list(user_dict.keys())
lst_routes = user_dict[edu_keys[0]]
msg = await call.message.answer("1. Получение видео...")
path = ""
if action == "build":
if os.path.exists(f"../data/cache/{lst_routes[-1][21:].replace('.mp4', '-all.mp4')}"):
path = f"../data/cache/{lst_routes[-1][21:].replace('.mp4', '-all.mp4')}"
else:
path = make_full_clip(lst_routes)
if not path:
await msg.edit_text("Данного маршрута в нашей базе пока нет, извините за неудобство, можете написать "
"желаемые маршруты на почту support@new-devs.ru")
return 0
elif action == "floor":
if os.path.exists(f"../data/cache/{lst_routes[-1][21:].replace('.mp4', '-small.mp4')}"):
path = f"../data/cache/{lst_routes[-1][21:].replace('.mp4', '-small.mp4')}"
else:
path = make_full_clip(lst_routes[1:])
if not path:
await msg.edit_text("Данного маршрута в нашей базе пока нет, извините за неудобство, можете написать "
"желаемые маршруты на почту support@new-devs.ru")
return 0
msg_finally = await msg.edit_text("2. Видео готово!")
await msg.answer_video_note(video_note=FSInputFile(path))
await msg_finally.delete()