from db.models.tickets import TicketStatus # ============================================================ # PREMIUM EMOJI # ============================================================ class PremiumEmoji: def __init__(self, emoji_id: int, emoji: str): self.emoji_id = emoji_id self.emoji = emoji def __str__(self) -> str: return f'{self.emoji}' # — Иконки бота MALENIA_LOGO = PremiumEmoji(5265053829522562789, "☀️") MALENIA_HEART = PremiumEmoji(5276516908257025723, "❤️") MALENIA_LINK = PremiumEmoji(5276012730636082950, "🔗") MALENIA_COINS = PremiumEmoji(5276298354551199712, "🪙") MALENIA_LOCKED = PremiumEmoji(5276346642868508688, "🔒") MALENIA_SUPPORT = PremiumEmoji(5275968088746006467, "🎧") # ============================================================ # МАППИНГИ # ============================================================ TICKET_STATUS_EMOJIS = { TicketStatus.CLOSED.value: "🌑", # Более сдержанно TicketStatus.OPEN.value: "📡", # В эфире TicketStatus.PENDING.value: "⏳", } # ============================================================ # СТАТУСЫ ПОДПИСКИ # ============================================================ # — Иконки статусов STATUS_ICON_ACTIVE = "🟢" STATUS_ICON_DISABLED = "⚪" STATUS_ICON_EXPIRED = "🔴" STATUS_ICON_LIMITED = "🟠" STATUS_ICON_UNKNOWN = "❓" # — Тексты статусов STATUS_ACTIVE = "работает" STATUS_DISABLED = "отключена" STATUS_EXPIRED = "срок вышел" STATUS_LIMITED = "трафик на нуле" STATUS_UNKNOWN = "выясняем" # ============================================================ # ФОРМАТИРОВАНИЕ ДАННЫХ # ============================================================ # — Дни до истечения подписки DAYS_LEFT_POSITIVE = "{days} дн." DAYS_LEFT_EXPIRED = "истекла {days} дн. назад" DAYS_LEFT_TODAY = "доживает последний день" # — Username NO_USERNAME = "скрыт" USERNAME_DISPLAY = "@{username}" # — Internal Squads NO_SQUADS = "отсутствуют" # — HWID лимит UNLIMITED_HWID = "без лимитов" # — Трафик NO_TRAFFIC_LIMIT = "не ограничен" TRAFFIC_WITH_LIMIT = "{used} / {limit}" TRAFFIC_NO_LIMIT = "{used}" # — Прочее NOTHING_PLACEHOLDER = "∅" # ============================================================ # ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС # ============================================================ MAIN_MENU = ( str(MALENIA_LOGO) + " Malenia — {quote}\n\n" + f"{MALENIA_COINS} Личный кабинет\n" + f"{MALENIA_LINK} Ключ доступа: {{link}}" ) FAQ_TEXT = ( "FAQ: Технический минимум\n\n" "Здесь нет магии и «инновационных прорывов». Только обфускация трафика и стабильные узлы. " "Если что-то не грузится — скорее всего, фильтры опять пробуют новые сигнатуры. " "Мы это уже чиним." ) GENERAL_PROCESSING = "⏳ Проверяем пакеты..." STANDARD_FALLBACK = "❌ Ошибка в логике. Прожмите /start. Если не поможет — значит, мы где-то не доглядели за кодом." CALLBACK_FALLBACK = "❌ Пакет потерян, попробуйте снова" CONTEXT_REINITIATED = "🌑 Сессия сброшена. Данные могли обновиться." UNDEFINED_MESSAGE = "❌ Таких команд у нас нет.\n\nИщете техподдержку? Вам в /support\nПотерялись? Вам в /start." # ============================================================ # РЕФЕРАЛЬНАЯ СИСТЕМА # ============================================================ REFERALS_MENU = ( "👥 Реферальная система\n\n" "Никакого сетевого маркетинга, просто делимся ресурсами.\n" f"{MALENIA_COINS} На вашем счету: " "{balance}₽\n" f"{MALENIA_LINK} Ссылка для своих: " "{link}" ) # ============================================================ # ОФОРМЛЕНИЕ ПОДПИСКИ # ============================================================ SUBSCRIPTION_DEVICE_SELECTOR = ( "Сколько девайсов нужно держать в сети одновременно?\n\nЦена вопроса: {price}₽" ) SUBSCRIPTION_DURATION_SELECTOR = "На какой срок планируем инфраструктуру?\n\nИтого: {price}₽" WHITELISTS_ALREADY_ON = "Списки доступа уже активны." CHECKOUT_PAYMENT_CHOICE = ( "Автоплатежи — это не к нам. Стукните в поддержку, там объяснят, куда слать деньги." ) # ============================================================ # ПОДДЕРЖКА # ============================================================ SUPPORT_INIT = ( f"{MALENIA_SUPPORT} Технический отдел\n" "— если интернет превратился в тыкву или есть идеи по конфигам.\n" "Пишите по делу, скриншоты приветствуются.\n\n" "🌑 /cancel — вернуться к делам" ) SUPPORT_MSG_SENT = "⏳ Принято. Инженеры посмотрят, как освободятся. " "Вернуться в меню: /cancel" SUPPORT_SIGNATURE = "📡 Ответ от Malenia Team:" # ============================================================ # ШАБЛОНЫ — ОБЩИЕ БЛОКИ # ============================================================ _SUPPORT_USER_DESCRIPTION = ( "👤 Профиль: {full_name}\n" "🔗 Alias: {username_display}\n" "🆔 UID: {telegram_id}\n\n" "💰 Баланс: {balance}" ) _DIVIDER = "────────────────────────────\n\n" # ============================================================ # ШАБЛОНЫ — ЗАЯВКИ И ТИКЕТЫ # ============================================================ SUPPORT_SUBSCRIPTION = ( "🎫 ВХОДЯЩИЙ ЗАПРОС:\n\n" + _SUPPORT_USER_DESCRIPTION + "\n" + _DIVIDER + "🗓️ Срок: {duration} мес.\n" + "📱 Устройства: {devices}\n" + "🏳️ Whitelists: {whitelist_description}\n\n" + "💰 К оплате: {price}₽" ) ADMIN_TICKET_WITH_RW = ( "🎫 ТИКЕТ T-{ticket_number:04d}\n\n" + _SUPPORT_USER_DESCRIPTION + "\n" + _DIVIDER + "📊 ТЕХ. ДАННЫЕ (Remnawave)\n\n" + "{status_icon} Статус: {status}\n" + "📅 Deadline: {expire_date}\n" + "⏳ Остаток: {days_left}\n" + "📊 Трафик: {used_traffic}\n" + "📱 HWID: {hwid_limit}\n" + "🎯 Squads: {squads}\n\n" + _DIVIDER + "🔑 UUID: {remnawave_uuid}" ) ADMIN_TICKET_WITHOUT_RW = ( "🎫 ТИКЕТ T-{ticket_number:04d}\n\n" "👤 Имя: {full_name}\n" "🔗 Alias: {username_display}\n" "🆔 UID: {telegram_id}\n\n" + _DIVIDER + "⚠️ Remnawave-профиль отсутствует" ) ADMIN_STANDARD_FALLBACK = "❌ Ошибка выполнения. Проверь логи, что-то пошло не по чертежу." # ============================================================ # АДМИНСКАЯ ХУЙНЯ # ============================================================ ADMIN_PROMOTION_INIT = "👥 Введите текст рассылки" ADMIN_PROMOTION_CONFIRMATION = "❓ Отправить сообщение всем пользователям бота?" SUCCESSFULLY_SENT_PROMOTION = "Успешно разосланно {user_count} пользователям."