Обновить utils/texts.py

This commit is contained in:
2026-07-30 12:02:13 +07:00
parent dd14853362
commit 8aea92b84f
+36 -72
View File
@@ -2,18 +2,16 @@
# Все текстовые сообщения бота, отправляемые пользователю # Все текстовые сообщения бота, отправляемые пользователю
# ========================================================= # =========================================================
# GLOBAL CONSTANTS # GLOBAL CONSTANTS & HELPERS
# ========================================================= # =========================================================
# --- Main Bot --- # --- Main Bot ---
# Общее для главного бота
UNKNOWN_MAIN_CMD_TEXT = ( UNKNOWN_MAIN_CMD_TEXT = (
"⚠️ <b>Неизвестная команда.</b>\n\n" "⚠️ <b>Неизвестная команда.</b>\n\n"
"Пожалуйста, используйте только цифры, соответствующие нужным пунктам меню, и отправьте выбранную цифру мне в сообщении." "Пожалуйста, используйте только цифры, соответствующие нужным пунктам меню, и отправьте выбранную цифру мне в сообщении."
) )
# --- Emoji Digits --- # --- Emoji Digits ---
# Используются для навигации и выбора пунктов меню
EMOJI_DIGITS = { EMOJI_DIGITS = {
"0": "0⃣", "0": "0⃣",
"1": "1⃣", "1": "1⃣",
@@ -29,7 +27,6 @@ EMOJI_DIGITS = {
} }
# --- Footer Templates --- # --- Footer Templates ---
# Шаблоны подвалов сообщений для навигации
def _footer(emojis: dict) -> str: def _footer(emojis: dict) -> str:
"""Стандартный футер с кнопками Назад и Меню""" """Стандартный футер с кнопками Назад и Меню"""
@@ -39,6 +36,17 @@ def _footer_main_only(emojis: dict) -> str:
"""Футер только с кнопкой Меню""" """Футер только с кнопкой Меню"""
return f"\n\n<i>{emojis['0']} — В главное меню</i>" return f"\n\n<i>{emojis['0']} — В главное меню</i>"
# --- 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 (
"⚠️ <i>В данный момент выполнить это действие невозможно. "
"Информация о проблеме передана ответственным.\n"
f"Приносим извинения за доставленные неудобства.</i>{footer}"
)
# ========================================================= # =========================================================
# TRANSCRIPTION BOT # TRANSCRIPTION BOT
@@ -209,14 +217,6 @@ def _photo_unknown(emojis: dict) -> str:
f"{emojis['0']}В главное меню" f"{emojis['0']}В главное меню"
) )
def _photo_error_handling(emojis: dict) -> str:
return (
f"⚠️ <i>В данный момент выполнить это действие невозможно. "
f"Информация о проблеме передана ответственным.\n"
f"Приносим извинения за доставленные неудобства.</i>\n\n"
f"{emojis['0']}В главное меню"
)
def _photo_uploading() -> str: def _photo_uploading() -> str:
return "⏳ Отправка..." return "⏳ Отправка..."
@@ -253,7 +253,7 @@ PHOTO_MAIN_MENU_TEXT = _photo_welcome(EMOJI_DIGITS)
PHOTO_UNKNOWN_CMD_TEXT = _photo_unknown(EMOJI_DIGITS) PHOTO_UNKNOWN_CMD_TEXT = _photo_unknown(EMOJI_DIGITS)
def photo_error_handling() -> str: 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() PHOTO_UPLOADING_TEXT = _photo_uploading()
@@ -319,14 +319,6 @@ def _search_feedback_info(emojis: dict) -> str:
f"{emojis['0']} — Выйти в главное меню" f"{emojis['0']} — Выйти в главное меню"
) )
def _search_unavailable(emojis: dict) -> str:
return (
"⚠️ <i>В данный момент выполнить это действие невозможно. "
"Информация о проблеме передана ответственным.\n"
"Приносим извинения за доставленные неудобства.</i>\n\n"
f"<i>{emojis['0']} — В главное меню</i>"
)
# --- Public constants and functions --- # --- Public constants and functions ---
SEARCH_MAIN_MENU_TEXT = _search_welcome(EMOJI_DIGITS) 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) return _search_feedback_info(emojis)
def search_unavailable_action(emojis: dict) -> str: 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 = { DOC_TYPES = {
"1": "Справка о доходах физического лица (2-НДФЛ)", "1": "Справка о доходах физического лица (2-НДФЛ)",
"2": "Справка об удержаниях за ДМС", "2": "Справка об удержаниях за ДМС",
@@ -367,12 +357,6 @@ DOC_TYPES = {
# --- Private functions (Internal logic) --- # --- Private functions (Internal logic) ---
def _lk_error_handling(emojis: dict) -> str:
return (
"⚠️ <i>В данный момент выполнить это действие невозможно. Информация о проблеме передана ответственным. Приносим извинения за доставленные неудобства.</i>\n\n"
f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>"
)
def _lk_auth_processing(emojis: dict) -> str: def _lk_auth_processing(emojis: dict) -> str:
return "⏳ <i>Проверка безопасности... Запрашиваю контакты авторизации...</i>" return "⏳ <i>Проверка безопасности... Запрашиваю контакты авторизации...</i>"
@@ -499,9 +483,8 @@ LK_UNKNOWN_CMD_TEXT = (
f"<i>{EMOJI_DIGITS['9']} — Назад\n{EMOJI_DIGITS['0']} — В главное меню</i>" f"<i>{EMOJI_DIGITS['9']} — Назад\n{EMOJI_DIGITS['0']} — В главное меню</i>"
) )
def lk_error_handling(emojis: dict) -> str: 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: def lk_auth_processing(emojis: dict) -> str:
return _lk_auth_processing(emojis) 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: def _instruct_main_menu(emojis: dict) -> str:
return ( return (
f"📋 <b>Выберите инструкцию:</b>\n\n" f"📋 <b>Выберите инструкцию:</b>\n\n"
f"{emojis['1']} — 🖥 Trueconf\n" f"{emojis['1']} — 🖥 Настройка TrueConf на мобильном устройстве\n"
f"{emojis['2']} — 📧 Почта\n\n" f"{emojis['2']} — 📧 Настройка почты на мобильном устройстве\n\n"
f"<i>{emojis['0']} — В главное меню</i>" f"<i>{emojis['0']} — В главное меню</i>"
) )
def _instruct_trueconf(emojis: dict) -> str: def _instruct_trueconf(emojis: dict) -> str:
"""Статический текст Trueconf — без проверки группы.""" """Статический текст Trueconf — без проверки группы."""
return ( return (
"🖥 <b>Инструкция по Trueconf</b>\n\n" "🖥 <b>Инструкция по TrueConf</b>\n\n"
"Данная функция находится в разработке.\n\n" "Данная функция находится в разработке.\n\n"
f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>" f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>"
) )
def _instruct_trueconf_pending(emojis: dict, cn: str) -> str: def _instruct_trueconf_pending(emojis: dict, cn: str) -> str:
"""Промпт для запроса доступа к Trueconf (когда нет заявки).""" """Промпт для запроса доступа к Trueconf (когда заявка ещё не создана)."""
return ( return (
f" У вас отсутствует доступ к TrueConf с мобильных устройств.\n\n" f"⚠ <b>У Вас отсутствует доступ к TrueConf с мобильных устройств.</b>\n\n"
f"Если Вам требуется доступ, то напишите цифру {emojis['1']}, либо выберите другие пункты меню.\n\n" f"Если Вам требуется доступ, то напишите цифру {emojis['1']}, либо выберите другие пункты меню.\n\n"
f"{emojis['1']} — Запросить доступ\n" f"{emojis['1']} — Запросить доступ\n"
f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>" f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>"
) )
def _instruct_trueconf_no_ticket(emojis: dict, cn: str) -> str: def _instruct_trueconf_no_ticket(emojis: dict, cn: str) -> str:
"""Текст Trueconf когда пользователь не найден в AD.""" """Текст Trueconf, когда пользователь не найден в AD."""
return ( return (
f"🖥 <b>Инструкция по Trueconf</b>\n\n" f"🖥 <b>Инструкция по TrueConf</b>\n\n"
f"Пользователь {cn} не найден в Active Directory.\n\n" f"Пользователь <b>{cn}</b> не найден в Active Directory.\n\n"
f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>" f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>"
) )
def _instruct_trueconf_with_ad(emojis: dict, cn: str, ticket_id: str = None) -> str: def _instruct_trueconf_with_ad(emojis: dict, cn: str, ticket_id: str = None) -> str:
""" """
Текст Trueconf с проверкой группы 2FA. Чистый шаблон сообщения Trueconf:
cn — CN пользователя из AD. - Если ticket_id передан: показываем статус заявки в ServiceDesk.
ticket_id — номер созданной заявки в SD. - Если ticket_id is None: у пользователя есть доступ, выводим подпись к файлу.
""" """
from utils.ad_checker import check_group_membership if ticket_id:
return (
result = check_group_membership(cn, "2FA") f"⚠ <b>У Вас отсутствует доступ к TrueConf с мобильных устройств.</b>\n\n"
f"🎫 Заявка #{ticket_id} для настройки создана в ServiceDesk!\n\n"
if not result["found"]: f"После выполнения заявки воспользуйтесь приложенной к этому сообщению инструкцией.\n\n"
ticket_part = f"\n\n🎫 <b>Заявка #{ticket_id} создана!</b>" if ticket_id else ""
return _instruct_trueconf_no_ticket(emojis, cn)
if result["in_group"]:
body = (
f"🖥 <b>Инструкция по Trueconf</b>\n\n"
f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>" f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>"
) )
else: else:
body = ( return (
f"ℹ У вас отсутствует доступ к TrueConf с мобильных устройств.\n\n" f"🖥 <b>Инструкция по настройке TrueConf на мобильном устройстве</b>\n\n"
f"🎫 Заявка #{ticket_id} для настройки создана в ServiceDesk!\n\n"
f"🔄 После выполнения заявки запросите инструкцию ещё раз.\n\n"
f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>" f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>"
) )
return body
def _instruct_email(emojis: dict) -> str: def _instruct_email(emojis: dict) -> str:
return ( return (
"📧 <b>Инструкция по Почте</b>\n\n" "📧 <b>Инструкция по почте на мобильном устройстве</b>\n\n"
"Данная функция находится в разработке.\n\n" "Данная функция находится в разработке.\n\n"
f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>" f"<i>{emojis['9']} — Назад\n{emojis['0']} — В главное меню</i>"
) )
@@ -671,10 +640,5 @@ INSTRUCT_TRUECONF_PENDING_TEXT = _instruct_trueconf_pending
INSTRUCT_TRUECONF_NO_TICKET_TEXT = _instruct_trueconf_no_ticket INSTRUCT_TRUECONF_NO_TICKET_TEXT = _instruct_trueconf_no_ticket
INSTRUCT_EMAIL_TEXT = _instruct_email(EMOJI_DIGITS) INSTRUCT_EMAIL_TEXT = _instruct_email(EMOJI_DIGITS)
# --- Standard error stub for all instruct failures --- # Единая стандартная заглушка системной ошибки для модуля инструкций
INSTRUCT_ERROR_MSG = ( INSTRUCT_ERROR_MSG = system_error_text(EMOJI_DIGITS, show_back=True)
"⚠️ <i>В данный момент выполнить это действие невозможно. "
"Информация о проблеме передана ответственным.\n"
"Приносим извинения за доставленные неудобства.</i>\n\n"
f"<i>{EMOJI_DIGITS['9']} — Назад\n{EMOJI_DIGITS['0']} — В главное меню</i>"
)