Untitled
4ae4d
python
01/23/2026 8:19 AM
3.8 KB
8
Indexable
# src/bot/core/handlers/view_by_uuid.py
from uuid import UUID
from dialog_bot_sdk.entities.messaging import UpdateInteractiveMediaEvent, UpdateMessage
from dialog_bot_sdk.interactive_media import Button, MediaGroupBuilder
from core.bot_kit.fsm import FSMContext, State, StatesGroup
from core.bot_kit.router import Router
from core.config import bot
from core.handlers.events_ui import send_event_card
from core.schemas.user import UserSchema
from core.services.event import EventService
from core.utils import delete_prev_message, delete_prev_message_by_peer
rt = Router()
class ViewByUuidState(StatesGroup):
wait_event_id = State()
def _back_keyboard(ctx_name: str):
label = "⬅️ Назад"
if ctx_name == "events":
label = "⬅️ К мероприятиям"
elif ctx_name == "points":
label = "⬅️ К баллам"
elif ctx_name == "volunteer_home":
label = "⬅️ В дом волонтёра"
return MediaGroupBuilder([Button(media_id="leave", value=ctx_name, label=label)]).build()
@bot.di
def view_by_uuid_start_handler(event: UpdateInteractiveMediaEvent, context: FSMContext):
delete_prev_message_by_peer(bot, event.peer)
ctx_name = str(event.data.value or "events").strip() or "events"
context.update_data({"view_by_uuid_ctx": ctx_name})
context.set_state(ViewByUuidState.wait_event_id)
bot.messaging.send_message(
peer=event.peer,
text="🔎 Поиск мероприятия по UUID\n\nВведи UUID мероприятия:",
interactive_media_groups=_back_keyboard(ctx_name),
)
@rt.message(state=ViewByUuidState.wait_event_id)
@bot.di
def view_by_uuid_step(
message: UpdateMessage,
context: FSMContext,
event_service: EventService,
user: UserSchema | None,
):
delete_prev_message(bot, message)
data = context.get_data()
ctx_name = (data.get("view_by_uuid_ctx") or "events").strip() or "events"
raw_id = message.message.text_message.text.strip()
try:
UUID(raw_id)
except Exception:
bot.messaging.send_message(
peer=message.peer,
text="⚠️ Некорректный UUID.\nПример: `c668f42a-dbd6-46d4-8efe-8a8fc3436951`",
interactive_media_groups=_back_keyboard(ctx_name),
)
context.set_state(ViewByUuidState.wait_event_id)
return
ev = event_service.get_event_by_id(raw_id)
if ev is None:
bot.messaging.send_message(
peer=message.peer,
text="⚠️ Мероприятие с таким UUID не найдено.",
interactive_media_groups=_back_keyboard(ctx_name),
)
context.set_state(ViewByUuidState.wait_event_id)
return
context.set_state(None)
send_event_card(
message.peer,
event_id=ev.id,
event_service=event_service,
user=user,
ctx_name=ctx_name,
)
Editor is loading...
Leave a Comment