diff --git a/utils/texts.py b/utils/texts.py index dfd65ff..cef25de 100644 --- a/utils/texts.py +++ b/utils/texts.py @@ -2,18 +2,16 @@ # Все текстовые сообщения бота, отправляемые пользователю # ========================================================= -# GLOBAL CONSTANTS +# GLOBAL CONSTANTS & HELPERS # ========================================================= # --- Main Bot --- -# Общее для главного бота UNKNOWN_MAIN_CMD_TEXT = ( "⚠️ Неизвестная команда.\n\n" "Пожалуйста, используйте только цифры, соответствующие нужным пунктам меню, и отправьте выбранную цифру мне в сообщении." ) # --- Emoji Digits --- -# Используются для навигации и выбора пунктов меню EMOJI_DIGITS = { "0": "0⃣", "1": "1⃣", @@ -29,7 +27,6 @@ EMOJI_DIGITS = { } # --- Footer Templates --- -# Шаблоны подвалов сообщений для навигации def _footer(emojis: dict) -> str: """Стандартный футер с кнопками Назад и Меню""" @@ -39,6 +36,17 @@ def _footer_main_only(emojis: dict) -> str: """Футер только с кнопкой Меню""" return f"\n\n{emojis['0']} — В главное меню" +# --- Universal System Error Stub --- + +def system_error_text(emojis: dict = EMOJI_DIGITS, show_back: bool = True) -> str: + """Универсальная системная заглушка ошибки для всех модулей бота.""" + footer = _footer(emojis) if show_back else _footer_main_only(emojis) + return ( + "⚠️ В данный момент выполнить это действие невозможно. " + "Информация о проблеме передана ответственным.\n" + f"Приносим извинения за доставленные неудобства.{footer}" + ) + # ========================================================= # TRANSCRIPTION BOT @@ -209,14 +217,6 @@ def _photo_unknown(emojis: dict) -> str: f"{emojis['0']} — В главное меню" ) -def _photo_error_handling(emojis: dict) -> str: - return ( - f"⚠️ В данный момент выполнить это действие невозможно. " - f"Информация о проблеме передана ответственным.\n" - f"Приносим извинения за доставленные неудобства.\n\n" - f"{emojis['0']} — В главное меню" - ) - def _photo_uploading() -> str: return "⏳ Отправка..." @@ -253,7 +253,7 @@ PHOTO_MAIN_MENU_TEXT = _photo_welcome(EMOJI_DIGITS) PHOTO_UNKNOWN_CMD_TEXT = _photo_unknown(EMOJI_DIGITS) def photo_error_handling() -> str: - return _photo_error_handling(EMOJI_DIGITS) + return system_error_text(EMOJI_DIGITS, show_back=False) PHOTO_UPLOADING_TEXT = _photo_uploading() @@ -319,14 +319,6 @@ def _search_feedback_info(emojis: dict) -> str: f"{emojis['0']} — Выйти в главное меню" ) -def _search_unavailable(emojis: dict) -> str: - return ( - "⚠️ В данный момент выполнить это действие невозможно. " - "Информация о проблеме передана ответственным.\n" - "Приносим извинения за доставленные неудобства.\n\n" - f"{emojis['0']} — В главное меню" - ) - # --- Public constants and functions --- SEARCH_MAIN_MENU_TEXT = _search_welcome(EMOJI_DIGITS) @@ -345,7 +337,7 @@ def search_feedback_info_text(emojis: dict) -> str: return _search_feedback_info(emojis) def search_unavailable_action(emojis: dict) -> str: - return _search_unavailable(emojis) + return system_error_text(emojis, show_back=False) # ========================================================= @@ -353,8 +345,6 @@ def search_unavailable_action(emojis: dict) -> str: # ========================================================= # Модуль Личного Кабинета (финансовые документы, табель и др.) -# --- Constants --- - DOC_TYPES = { "1": "Справка о доходах физического лица (2-НДФЛ)", "2": "Справка об удержаниях за ДМС", @@ -367,12 +357,6 @@ DOC_TYPES = { # --- Private functions (Internal logic) --- -def _lk_error_handling(emojis: dict) -> str: - return ( - "⚠️ В данный момент выполнить это действие невозможно. Информация о проблеме передана ответственным. Приносим извинения за доставленные неудобства.\n\n" - f"{emojis['9']} — Назад\n{emojis['0']} — В главное меню" - ) - def _lk_auth_processing(emojis: dict) -> str: return "⏳ Проверка безопасности... Запрашиваю контакты авторизации..." @@ -499,9 +483,8 @@ LK_UNKNOWN_CMD_TEXT = ( f"{EMOJI_DIGITS['9']} — Назад\n{EMOJI_DIGITS['0']} — В главное меню" ) - def lk_error_handling(emojis: dict) -> str: - return _lk_error_handling(emojis) + return system_error_text(emojis, show_back=True) def lk_auth_processing(emojis: dict) -> str: return _lk_auth_processing(emojis) @@ -592,72 +575,58 @@ def lk_years_menu(current_year: int, emojis: dict) -> str: def _instruct_main_menu(emojis: dict) -> str: return ( f"📋 Выберите инструкцию:\n\n" - f"{emojis['1']} — 🖥 Trueconf\n" - f"{emojis['2']} — 📧 Почта\n\n" + f"{emojis['1']} — 🖥 Настройка TrueConf на мобильном устройстве\n" + f"{emojis['2']} — 📧 Настройка почты на мобильном устройстве\n\n" f"{emojis['0']} — В главное меню" ) def _instruct_trueconf(emojis: dict) -> str: """Статический текст Trueconf — без проверки группы.""" return ( - "🖥 Инструкция по Trueconf\n\n" + "🖥 Инструкция по TrueConf\n\n" "Данная функция находится в разработке.\n\n" f"{emojis['9']} — Назад\n{emojis['0']} — В главное меню" ) - def _instruct_trueconf_pending(emojis: dict, cn: str) -> str: - """Промпт для запроса доступа к Trueconf (когда нет заявки).""" + """Промпт для запроса доступа к Trueconf (когда заявка ещё не создана).""" return ( - f"ℹ У вас отсутствует доступ к TrueConf с мобильных устройств.\n\n" + f"⚠ У Вас отсутствует доступ к TrueConf с мобильных устройств.\n\n" f"Если Вам требуется доступ, то напишите цифру {emojis['1']}, либо выберите другие пункты меню.\n\n" f"{emojis['1']} — Запросить доступ\n" f"{emojis['9']} — Назад\n{emojis['0']} — В главное меню" ) - def _instruct_trueconf_no_ticket(emojis: dict, cn: str) -> str: - """Текст Trueconf когда пользователь не найден в AD.""" + """Текст Trueconf, когда пользователь не найден в AD.""" return ( - f"🖥 Инструкция по Trueconf\n\n" - f"Пользователь {cn} не найден в Active Directory.\n\n" + f"🖥 Инструкция по TrueConf\n\n" + f"Пользователь {cn} не найден в Active Directory.\n\n" f"{emojis['9']} — Назад\n{emojis['0']} — В главное меню" ) - def _instruct_trueconf_with_ad(emojis: dict, cn: str, ticket_id: str = None) -> str: """ - Текст Trueconf с проверкой группы 2FA. - cn — CN пользователя из AD. - ticket_id — номер созданной заявки в SD. + Чистый шаблон сообщения Trueconf: + - Если ticket_id передан: показываем статус заявки в ServiceDesk. + - Если ticket_id is None: у пользователя есть доступ, выводим подпись к файлу. """ - from utils.ad_checker import check_group_membership - - result = check_group_membership(cn, "2FA") - - if not result["found"]: - ticket_part = f"\n\n🎫 Заявка #{ticket_id} создана!" if ticket_id else "" - return _instruct_trueconf_no_ticket(emojis, cn) - - if result["in_group"]: - body = ( - f"🖥 Инструкция по Trueconf\n\n" + if ticket_id: + return ( + f"⚠ У Вас отсутствует доступ к TrueConf с мобильных устройств.\n\n" + f"🎫 Заявка #{ticket_id} для настройки создана в ServiceDesk!\n\n" + f"После выполнения заявки воспользуйтесь приложенной к этому сообщению инструкцией.\n\n" f"{emojis['9']} — Назад\n{emojis['0']} — В главное меню" ) else: - body = ( - f"ℹ У вас отсутствует доступ к TrueConf с мобильных устройств.\n\n" - f"🎫 Заявка #{ticket_id} для настройки создана в ServiceDesk!\n\n" - f"🔄 После выполнения заявки запросите инструкцию ещё раз.\n\n" + return ( + f"🖥 Инструкция по настройке TrueConf на мобильном устройстве\n\n" f"{emojis['9']} — Назад\n{emojis['0']} — В главное меню" ) - return body - - def _instruct_email(emojis: dict) -> str: return ( - "📧 Инструкция по Почте\n\n" + "📧 Инструкция по почте на мобильном устройстве\n\n" "Данная функция находится в разработке.\n\n" f"{emojis['9']} — Назад\n{emojis['0']} — В главное меню" ) @@ -671,10 +640,5 @@ INSTRUCT_TRUECONF_PENDING_TEXT = _instruct_trueconf_pending INSTRUCT_TRUECONF_NO_TICKET_TEXT = _instruct_trueconf_no_ticket INSTRUCT_EMAIL_TEXT = _instruct_email(EMOJI_DIGITS) -# --- Standard error stub for all instruct failures --- -INSTRUCT_ERROR_MSG = ( - "⚠️ В данный момент выполнить это действие невозможно. " - "Информация о проблеме передана ответственным.\n" - "Приносим извинения за доставленные неудобства.\n\n" - f"{EMOJI_DIGITS['9']} — Назад\n{EMOJI_DIGITS['0']} — В главное меню" -) \ No newline at end of file +# Единая стандартная заглушка системной ошибки для модуля инструкций +INSTRUCT_ERROR_MSG = system_error_text(EMOJI_DIGITS, show_back=True) \ No newline at end of file