intra_max_chatbot/bot/texts.py
2026-04-03 00:30:24 +03:00

193 lines
10 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Все пользовательские тексты и подписи кнопок.
Шаблоны с плейсхолдерами форматируются на месте вызова через .format(...).
"""
class AuthTexts:
# bot_started — заблокированный пользователь
BLOCKED = (
"⛔ Ваш номер не найден в системе. Доступ заблокирован.\n"
"Обратитесь к администратору для подключения."
)
# /start — заблокированный пользователь
BLOCKED_SHORT = "⛔ Доступ заблокирован. Обратитесь к администратору."
# bot_started — новый пользователь
WELCOME_NEW = (
"👋 Добро пожаловать в систему технической поддержки!\n\n"
"Для входа нажмите кнопку ниже и поделитесь своим номером телефона."
)
# /start — новый пользователь
WELCOME_START = (
"👋 Добро пожаловать!\n\n"
"Поделитесь номером телефона для доступа к системе."
)
# /start — пользователь не авторизован
SHARE_PHONE = "Поделитесь номером телефона для доступа:"
# bot_started — возвращающийся пользователь (префикс перед текстом меню)
WELCOME_BACK = "👋 С возвращением!\n\n"
# Успешная авторизация (префикс перед текстом меню)
AUTHORIZED = "✅ Вы успешно авторизованы!\n\n"
# Ошибки при шаринге контакта
CONTACT_READ_ERROR = "Не удалось прочитать контакт. Попробуйте ещё раз."
CONTACT_NO_PHONE = "В контакте не найден номер телефона. Попробуйте ещё раз."
# Загрузка после шаринга номера
LOADING = "⏳ Проверяем номер..."
# Телефон не найден в белом списке
PHONE_NOT_FOUND = (
"⛔ Ваш номер не найден в системе.\n"
"Доступ заблокирован. Обратитесь к администратору для подключения."
)
class TicketTexts:
# Шаг 1 — приглашение описать проблему
ENTER_DESCRIPTION = (
"📝 Опишите вашу проблему.\n\n"
"Вы также можете прикрепить файлы, фото или голосовые сообщения.\n"
"Когда закончите — нажмите «👁 Перейти к предпросмотру»."
)
# Прислали что-то без текста и без вложений
NEED_TEXT = "❗ Пожалуйста, напишите описание проблемы текстом."
# Прислали файл, но нет текста
FILE_RECEIVED_NEED_TEXT = "✅ Вложение принято! Теперь напишите описание проблемы текстом:"
# Описание принято, можно добавить ещё
DESCRIPTION_ACCEPTED = (
"✏️ Описание принято. Вы можете добавить ещё файлы "
"или нажмите «👁 Перейти к предпросмотру»."
)
# Нажали «Готово» без описания — уведомление
PREVIEW_NEED_TEXT_NOTIF = "Сначала опишите проблему!"
# Нажали «Готово» без описания — сообщение
PREVIEW_NEED_TEXT = "❗ Пожалуйста, сначала напишите описание проблемы."
# Вернулись к редактированию из предпросмотра
CONTINUE_EDITING = (
"✏️ Продолжайте добавлять описание или вложения.\n"
"Нажмите «👁 Перейти к предпросмотру» когда будете готовы."
)
# Уведомление при отмене создания
CANCEL_NOTIF = "Создание отменено"
# Отправка заявки
SENDING = "⏳ Отправляем заявку…"
# Успешное создание
CREATED = "✅ Заявка успешно создана!"
# Номер созданной заявки: .format(number=n)
CREATED_NUMBER = "Номер заявки: #{number}"
# Подпись после создания
CREATED_CONTACT = "Наши специалисты свяжутся с вами в ближайшее время."
# Предпросмотр
PREVIEW_HEADER = "📋 Предпросмотр заявки:"
PREVIEW_ATTACHMENTS_HEADER = "📎 Вложения:"
PREVIEW_CONFIRM_PROMPT = "Всё верно? Подтвердите или вернитесь к редактированию."
# Подписи вложений в предпросмотре
ATT_PHOTO = "🖼 Фото"
ATT_VIDEO = "📹 Видео"
ATT_AUDIO = "🎤 Голосовое"
ATT_AUDIO_DUR = "🎤 Голосовое ({mins:02d}:{secs:02d})"
ATT_FILE = "📎 {fname}"
ATT_FILE_UNNAMED = "📎 Файл"
ATT_OTHER = "📎 Вложение"
class TicketListTexts:
LOADING = "⏳ Загружаем список заявок..."
NO_ORG = "⚠️ Ваша организация не привязана к Intradesk. Обратитесь к администратору."
EMPTY = "📭 Активных заявок нет."
# Заголовок списка: .format(total=n, page=n, pages=n)
HEADER = "📋 Активные заявки (всего: {total}) — стр. {page}/{pages}"
NO_COMMENTS = "💬 Нет комментариев"
class TicketDetailTexts:
LOADING = "⏳ Загружаем заявку..."
NOT_FOUND = "⚠️ Заявка не найдена. Вернитесь к списку."
DESCRIPTION_HEADER = "📝 Описание:"
COMMENTS_HEADER = "💬 Комментарии ({count}):"
NO_COMMENTS = "💬 Комментариев нет"
# Закрытие заявки
CLOSING = "⏳ Закрываем заявку..."
# .format(num_str=" #123" или "")
CLOSED = "✅ Заявка{num_str} закрыта."
CLOSE_ERROR = "⚠️ Не удалось закрыть заявку. Попробуйте позже."
CLOSE_NUMBER_ERROR = "⚠️ Не удалось определить номер заявки. Вернитесь к списку."
GENERIC_ERROR = "Ошибка"
class CommentTexts:
# .format(num_str=" к заявке #123" или "")
PROMPT = (
"💬 Напишите комментарий{num_str}:\n\n"
"Можно отправить текст, файл, фото или голосовое сообщение.\n"
"Нажмите «← Назад к заявке» для отмены."
)
EMPTY_ERROR = "❗ Комментарий не может быть пустым. Напишите текст или прикрепите файл:"
FILE_ONLY = "📎 Файл прикреплён"
# .format(num_str=" к заявке #123" или "")
SUCCESS = "✅ Комментарий{num_str} успешно отправлен!"
ERROR = "⚠️ Не удалось отправить комментарий. Попробуйте позже."
class MenuTexts:
LOADING = "⏳ Загружаем меню..."
SEPARATOR = "" * 16
# .format(org_name="...")
ORG_HEADER = "🏢 {org_name}"
NO_ORG_HEADER = "🏠 Поддержка"
NO_TICKETS = "📭 Активных заявок нет"
NO_TICKETS_HINT = "Нажмите «Создать заявку» и мы\nсвяжемся с вами в ближайшее время."
# .format(active=n)
ACTIVE_COUNT = "📋 Активных заявок: {active}"
# .format(num_str=" (заявка #123)" или "")
LAST_COMMENT = "💬 Последний ответ{num_str}:"
# .format(author="...", short_date="...")
LAST_COMMENT_AUTHOR = "{author}, {short_date}"
NO_NEW_COMMENTS = "💬 Новых ответов нет"
NO_ORG_DATA = "📭 Нет данных об организации"
CHOOSE_ACTION = "Выберите действие 👇"
# Префикс при /cancel с активным флоу
CANCEL_PREFIX = "❌ Действие отменено.\n\n"
class QuickReplyTexts:
# .format(number=task_number, text=user_text)
CONFIRM = (
"📨 Отправить как ответ на заявку #{number}?\n\n"
"«{text}»"
)
# .format(number=task_number)
SENT = "✅ Ответ на заявку #{number} отправлен."
ERROR = "⚠️ Не удалось отправить ответ. Попробуйте через меню."
class Btn:
"""Подписи всех inline-кнопок."""
# Главное меню
CREATE_TICKET = "📝 Создать заявку"
VIEW_TICKETS = "📋 Мои заявки"
MAIN_MENU = "🏠 Главное меню"
# Авторизация
SHARE_CONTACT = "📱 Поделиться контактом"
# Создание заявки
DONE_TICKET = "✅ Готово"
CONFIRM_TICKET = "✅ Подтвердить"
EDIT_TICKET = "✏️ Продолжить редактирование"
CANCEL_TICKET = "❌ Отменить создание"
# Навигация по заявкам
PREV_PAGE = "← Пред."
NEXT_PAGE = "След. →"
BACK_TO_MENU = "← Назад в меню"
BACK_TO_LIST = "К списку заявок"
BACK_TO_TICKET = "← Назад к заявке"
BACK_TO_TICKETS = "К списку"
# Карточка заявки
ADD_COMMENT = "💬 Оставить комментарий"
CLOSE_TICKET = "🔒 Закрыть заявку"
# Уведомления и быстрый ответ
REPLY_TO_TICKET = "💬 Ответить"
OPEN_TICKET = "📋 К заявке"
CONFIRM_REPLY = "✅ Отправить"
CANCEL_REPLY = "❌ Отмена"
CHOOSE_TICKET = "📋 Выбрать другую заявку"