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:
parent
4ae8b19497
commit
997e546f89
3 changed files with 32 additions and 12 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 = ""
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue