Untitled

4ae4d avatar
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