1
0
Fork 0
mirror of https://github.com/EDeev/mospoly-helper.git synced 2026-10-07 20:49:32 +03:00

Бот не падает на неожиданном вводе

- номер кабинета без /route (файла пользователя ещё нет) и неизвестные команды —
  подсказка начать с /route вместо исключения;
- слишком короткий номер кабинета — понятная подсказка с примером формата вместо
  «Обрыв программы по неизвестной причине»;
- кнопки от прошлого запроса после нового /route — просьба начать заново вместо падения;
- лишние f-строки и неиспользуемый импорт (ruff).
This commit is contained in:
Деев Егор Викторович 2026-10-05 18:00:17 +00:00
parent 4ae8b19497
commit 997e546f89
3 changed files with 32 additions and 12 deletions

View file

@ -1,10 +1,14 @@
import json
import os
class JsonTools:
def __init__(self, user_id):
self.f_name = f"../data/users/{user_id}.json"
def exists(self):
return os.path.exists(self.f_name)
def save_json(self, data):
with open(self.f_name, "w", encoding="utf8") as f:
return json.dump(data, f)

View file

@ -26,11 +26,11 @@ async def help_handler(msg: Message) -> None:
@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")]]
buttons = [[InlineKeyboardButton(text="На Большой Семёновской", callback_data="edu:bs")],
[InlineKeyboardButton(text="На Павла Корчагина", callback_data="edu:pk")],
[InlineKeyboardButton(text="На Прянишкова", callback_data="edu:pr"),
InlineKeyboardButton(text="На Михалковской", callback_data="edu:mi")],
[InlineKeyboardButton(text="На Автозаводской", callback_data="edu:av")]]
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
await msg.answer(text="Выберите корпус на котором вы хотите проложить маршрут:", reply_markup=keyboard)
@ -50,9 +50,12 @@ async def route_button(call: CallbackQuery) -> None:
@router.message(F.content_type == ContentType.TEXT)
async def add_cabinet(msg: Message) -> None:
cab = msg.text.lower()
cab = msg.text.lower().strip()
jsn = JsonTools(msg.from_user.id)
if cab.startswith("/") or not jsn.exists():
await msg.answer("Сначала выберите корпус командой <b>/route</b>, затем напишите номер кабинета.")
return
user_dict = jsn.read_json()
edu_keys = list(user_dict.keys())
@ -65,13 +68,14 @@ async def add_cabinet(msg: Message) -> None:
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")]]
buttons = [[InlineKeyboardButton(text="От входа на территорию", callback_data="route:build")],
[InlineKeyboardButton(text="От входа в корпус", callback_data="route:floor")]]
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
await msg.answer("Кабинет успешно получен, обрабатываем путь! Откуда вам проложить маршрут:", reply_markup=keyboard)
else:
await msg.answer("Обрыв программы по неизвестной причине!")
await msg.answer("Не получилось разобрать номер кабинета. Напишите его в точности как в личном "
"кабинете, например <b>пр2202а</b>.")
else:
await msg.answer("Вы скинули не кабинет! Я же вижу)")
@ -81,9 +85,13 @@ async def var_button(call: CallbackQuery) -> None:
action = call.data.split(":")[1]
jsn = JsonTools(call.from_user.id)
user_dict = jsn.read_json()
user_dict = jsn.read_json() if jsn.exists() else {}
edu_keys = list(user_dict.keys())
lst_routes = user_dict[edu_keys[0]]
lst_routes = user_dict[edu_keys[0]] if edu_keys else []
if not lst_routes:
# кнопки от прошлого запроса: кабинет ещё не выбран заново
await call.message.answer("Маршрут устарел, начните заново: <b>/route</b>")
return
msg = await call.message.answer("1. Получение видео...")
path = ""

View file

@ -1,7 +1,15 @@
from moviepy import VideoFileClip, concatenate_videoclips
import os, asyncio
import os
async def get_routes(id_building: str, id_cab: str, other=False):
try:
return _build_routes(id_building, id_cab, other)
except IndexError:
# номер кабинета короче ожидаемого формата
return None
def _build_routes(id_building: str, id_cab: str, other=False):
if other:
id_cab = id_cab.replace('-', "")
building=id_cab[0]