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 json
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
class JsonTools:
|
class JsonTools:
|
||||||
def __init__(self, user_id):
|
def __init__(self, user_id):
|
||||||
self.f_name = f"../data/users/{user_id}.json"
|
self.f_name = f"../data/users/{user_id}.json"
|
||||||
|
|
||||||
|
def exists(self):
|
||||||
|
return os.path.exists(self.f_name)
|
||||||
|
|
||||||
def save_json(self, data):
|
def save_json(self, data):
|
||||||
with open(self.f_name, "w", encoding="utf8") as f:
|
with open(self.f_name, "w", encoding="utf8") as f:
|
||||||
return json.dump(data, f)
|
return json.dump(data, f)
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,11 @@ async def help_handler(msg: Message) -> None:
|
||||||
|
|
||||||
@router.message(Command("route"))
|
@router.message(Command("route"))
|
||||||
async def route_handler(msg: Message) -> None:
|
async def route_handler(msg: Message) -> None:
|
||||||
buttons = [[InlineKeyboardButton(text=f"На Большой Семёновской", callback_data="edu:bs")],
|
buttons = [[InlineKeyboardButton(text="На Большой Семёновской", callback_data="edu:bs")],
|
||||||
[InlineKeyboardButton(text=f"На Павла Корчагина", callback_data="edu:pk")],
|
[InlineKeyboardButton(text="На Павла Корчагина", callback_data="edu:pk")],
|
||||||
[InlineKeyboardButton(text=f"На Прянишкова", callback_data="edu:pr"),
|
[InlineKeyboardButton(text="На Прянишкова", callback_data="edu:pr"),
|
||||||
InlineKeyboardButton(text=f"На Михалковской", callback_data="edu:mi")],
|
InlineKeyboardButton(text="На Михалковской", callback_data="edu:mi")],
|
||||||
[InlineKeyboardButton(text=f"На Автозаводской", callback_data="edu:av")]]
|
[InlineKeyboardButton(text="На Автозаводской", callback_data="edu:av")]]
|
||||||
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
|
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||||
|
|
||||||
await msg.answer(text="Выберите корпус на котором вы хотите проложить маршрут:", reply_markup=keyboard)
|
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)
|
@router.message(F.content_type == ContentType.TEXT)
|
||||||
async def add_cabinet(msg: Message) -> None:
|
async def add_cabinet(msg: Message) -> None:
|
||||||
cab = msg.text.lower()
|
cab = msg.text.lower().strip()
|
||||||
|
|
||||||
jsn = JsonTools(msg.from_user.id)
|
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()
|
user_dict = jsn.read_json()
|
||||||
edu_keys = list(user_dict.keys())
|
edu_keys = list(user_dict.keys())
|
||||||
|
|
||||||
|
|
@ -65,13 +68,14 @@ async def add_cabinet(msg: Message) -> None:
|
||||||
user_dict[edu_keys[0]] = lst_routes
|
user_dict[edu_keys[0]] = lst_routes
|
||||||
jsn.save_json(user_dict)
|
jsn.save_json(user_dict)
|
||||||
|
|
||||||
buttons = [[InlineKeyboardButton(text=f"От входа на территорию", callback_data="route:build")],
|
buttons = [[InlineKeyboardButton(text="От входа на территорию", callback_data="route:build")],
|
||||||
[InlineKeyboardButton(text=f"От входа в корпус", callback_data="route:floor")]]
|
[InlineKeyboardButton(text="От входа в корпус", callback_data="route:floor")]]
|
||||||
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
|
keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||||
|
|
||||||
await msg.answer("Кабинет успешно получен, обрабатываем путь! Откуда вам проложить маршрут:", reply_markup=keyboard)
|
await msg.answer("Кабинет успешно получен, обрабатываем путь! Откуда вам проложить маршрут:", reply_markup=keyboard)
|
||||||
else:
|
else:
|
||||||
await msg.answer("Обрыв программы по неизвестной причине!")
|
await msg.answer("Не получилось разобрать номер кабинета. Напишите его в точности как в личном "
|
||||||
|
"кабинете, например <b>пр2202а</b>.")
|
||||||
else:
|
else:
|
||||||
await msg.answer("Вы скинули не кабинет! Я же вижу)")
|
await msg.answer("Вы скинули не кабинет! Я же вижу)")
|
||||||
|
|
||||||
|
|
@ -81,9 +85,13 @@ async def var_button(call: CallbackQuery) -> None:
|
||||||
action = call.data.split(":")[1]
|
action = call.data.split(":")[1]
|
||||||
|
|
||||||
jsn = JsonTools(call.from_user.id)
|
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())
|
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. Получение видео...")
|
msg = await call.message.answer("1. Получение видео...")
|
||||||
path = ""
|
path = ""
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,15 @@
|
||||||
from moviepy import VideoFileClip, concatenate_videoclips
|
from moviepy import VideoFileClip, concatenate_videoclips
|
||||||
import os, asyncio
|
import os
|
||||||
|
|
||||||
async def get_routes(id_building: str, id_cab: str, other=False):
|
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:
|
if other:
|
||||||
id_cab = id_cab.replace('-', "")
|
id_cab = id_cab.replace('-', "")
|
||||||
building=id_cab[0]
|
building=id_cab[0]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue