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, "🎧") # ============================================================ # ШАБЛОНЫ — ОБЩИЕ БЛОКИ # ============================================================ _SUPPORT_USER_DESCRIPTION = ( "👤 Профиль: {full_name}\n" "🔗 Alias: {username_display}\n" "🆔 UID: {telegram_id}\n\n" "❤️ Referal UID: {referal_id}\n\n" "💰 Баланс: {balance}" ) _DIVIDER = "────────────────────────────\n\n" # ============================================================ # МАППИНГИ # ============================================================ 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 = ( "Ваши частые вопросы:\n\n" "— Зачем мне это?\n" "Если вас устраивает, что ваш интернет ограничен парой сайтов и банков, то вам не к нам. Но если хочется свободы и анонимности — добро пожаловать.\n\n" "— Это безопасно?\n" "Мы не храним ваши данные, не используем их в коммерческих целях и не передаем третьим лицам," "но важно понимать, что полной анонимности не существует. Мы делаем всё, чтобы минимизировать риски, но не продаём иллюзий.\n\n" "— Почему что-то не работает?\n" "Фильтры постоянно обновляются и подстраиваются под новые методы обхода. А мы подстраиваемся под них.\n" "Если что-то перестало работать, скорее всего, это временно, и мы уже работаем над решением. Но обращения в поддержку с описанием проблемы и скриншотами всегда приветствуются, это помогает нам быстрее находить и устранять проблемы.\n\n" "— Как работает реферальная система?\n" "Вы получаете уникальную ссылку, по которой могут прийти ваши друзья. За каждого приведённого друга, который оформит подписку," "вам будет начисляться процент от их оплаченной подписки на баланс." ) GENERAL_PROCESSING = "⏳ Подождите..." STANDARD_FALLBACK = ( "❌ Ошибка. Прожмите /start. Если не поможет — значит, мы где-то не доглядели." ) CALLBACK_FALLBACK = "❌ Что-то пошло не так. Повторите попытку или обратитесь в поддержку." CONTEXT_REINITIATED = "🌑 Сессия сброшена. Данные могли обновиться." UNDEFINED_MESSAGE = "❌ Таких команд у нас нет.\n\nИщете техподдержку? Вам в /support\nПотерялись? Вам в /start." SUBSCRIPTION_INFORMATION = ( "📊 Данные о подписке\n\n" f"{MALENIA_LINK} Ссылка на подписку: {{link}}\n\n" "{status_icon} Статус: {status}\n" + "📅 Истекает: {expire_date}\n" + "⏳ Осталось дней: {days_left}\n" + "📊 Израсходовано трафика: {used_traffic}\n" + "📱 Количество устройств: {hwid_limit}\n" ) NO_SUBSCRIPTION = "⚠️ Подписка не найдена." # ============================================================ # РЕФЕРАЛЬНАЯ СИСТЕМА # ============================================================ 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}₽ (скидка: {discount}%)" ) WHITELISTS_ALREADY_ON = "Белые списки уже активны." CHECKOUT_PAYMENT_CHOICE = "Пока что без автоплатежа. Нажмите кнопку ниже и обратитесь в поддержку для оплаты и активации подписки." # ============================================================ # ПОДДЕРЖКА # ============================================================ SUPPORT_INIT = "🎧 Тех. Поддержка Malenia — не здесь. Кнопка ниже." SUPPORT_MSG_SENT = "⏳ Приняли ваше сообщение. Мы постараемся ответить на него в ближайшее время.\nВернуться в меню: /cancel" SUPPORT_SIGNATURE = "📡 Ответ от Malenia:" # ============================================================ # ШАБЛОНЫ — ЗАЯВКИ И ТИКЕТЫ # ============================================================ 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" + _SUPPORT_USER_DESCRIPTION + "\n" + _DIVIDER + NO_SUBSCRIPTION ) ADMIN_STANDARD_FALLBACK = "❌ Ошибка выполнения. Проверь логи, что-то пошло не по чертежу." # ============================================================ # АДМИНСКАЯ ХУЙНЯ # ============================================================ ADMIN_PROMOTION_INIT = "👥 Введите текст рассылки" ADMIN_PROMOTION_CONFIRMATION = "❓ Отправить сообщение всем пользователям бота?" SUCCESSFULLY_SENT_PROMOTION = "Успешно разосланно {user_count} пользователям." SPECIFY_REFERAL_PAYMENT_AMOUNT = "Укажите количество средств для перевода рефералу пользователя." USER_NO_REFERAL = "❌ У пользователя нет реферала." INVALID_ARGUMENT_REFPAY = "❌ Укажите в аргументах количество средств, которые необходимо перевести рефералу пользователя." SUCCESSFUL_REFPAY = "💸 Баланс реферала ({referal_id}) пополнен на {amount}₽"