From 9a24f48259493e566db40a9908b604149be4a533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D0=B8=D1=81=20=D0=9A=D1=80=D0=B8=D0=B2?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Mon, 27 Jul 2026 23:43:15 +0700 Subject: [PATCH] fix: separate ticket check from creation in Trueconf flow --- instruct/handlers.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/instruct/handlers.py b/instruct/handlers.py index 6219d3a..4971fbf 100644 --- a/instruct/handlers.py +++ b/instruct/handlers.py @@ -205,7 +205,6 @@ async def _find_existing_trueconf_ticket(requester_email: str) -> str | None: async def create_sd_ticket_for_trueconf(user_id: str, cn: str) -> str | None: """ Создать заявку в Service Desk для запроса доступа к Trueconf. - Если уже есть открытая заявка — возвращает её ID. """ subject = "Запрос доступа к Trueconf" @@ -214,12 +213,6 @@ async def create_sd_ticket_for_trueconf(user_id: str, cn: str) -> str | None: requester_email = ad_info.get("mail") or DEFAULT_REQUESTER city = ad_info.get("city", "Кемерово") if ad_info else "Кемерово" - # Сначала ищем существующую открытую заявку - existing_ticket = await _find_existing_trueconf_ticket(requester_email) - if existing_ticket: - logger.info(f"Returning existing ticket #{existing_ticket} for {cn}") - return existing_ticket - description = ( f"Пользователь {cn} ({user_id}) запросил инструкцию по Trueconf, " f"но не имеет группы 2FA. Требуется выдача доступа." @@ -300,11 +293,13 @@ async def instruct_router_handler(msg: Message): await msg.answer(text, parse_mode="html") else: # Нет доступа — проверяем, есть ли уже открытая заявка - ticket_id = await create_sd_ticket_for_trueconf(user_id, cn) - if ticket_id: + ad_info = get_ad_user_info(user_id) + requester_email = ad_info.get("mail") or DEFAULT_REQUESTER + existing_ticket = await _find_existing_trueconf_ticket(requester_email) + if existing_ticket: # Заявка уже существует — показываем информацию set_state(user_id, "INSTRUCT_TRUECONF_VIEW") - text = INSTRUCT_TRUECONF_WITH_AD(EMOJI_DIGITS, cn, ticket_id) + text = INSTRUCT_TRUECONF_WITH_AD(EMOJI_DIGITS, cn, existing_ticket) await msg.answer(text, parse_mode="html") else: # Заявки нет — показываем промпт с запросом