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"
"❤️ Referal UID: {referal_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"
+ _SUPPORT_USER_DESCRIPTION
+ "\n"
+ _DIVIDER
+ "⚠️ Remnawave-профиль отсутствует"
)
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}₽"