Files
malenia/texts.py
2026-04-08 20:33:18 +07:00

146 lines
5.6 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.
from misc.utils import fetch_quote
from db.models.tickets import TicketStatus
class PremiumEmoji:
def __init__(self, emoji_id: int, emoji: str):
self.emoji_id = emoji_id
self.emoji = emoji
def __str__(self) -> str:
return f'<tg-emoji emoji-id="{self.emoji_id}">{self.emoji}</tg-emoji>'
## EMOJIS
MALENIA_LOGO = PremiumEmoji(5265053829522562789, "☀️")
MALENIA_HEART = PremiumEmoji(5276516908257025723, "❤️")
MALENIA_LINK = PremiumEmoji(5276012730636082950, "🔗")
MALENIA_COINS = PremiumEmoji(5276298354551199712, "🪙")
MALENIA_LOCKED = PremiumEmoji(5276346642868508688, "🔒")
MALENIA_SUPPORT = PremiumEmoji(5275968088746006467, "🎧")
## MAPPING
TICKET_STATUS_EMOJIS = {
TicketStatus.CLOSED.value: "🔴",
TicketStatus.OPEN.value: "🟢",
TicketStatus.PENDING.value: "🟡",
}
## TEXTS
MAIN_MENU = (
str(MALENIA_LOGO)
+ " <b>Malenia — <i>{quote}</i></b>\n\n"
+ f"<i>{MALENIA_COINS} Личный кабинет</i>"
)
STANDARD_FALLBACK = (
"<b>❌ Что-то пошло не так</b>, прожмите /start и повторите попытку позже."
)
TEMP_SUPPORT_FORM = (
"обратитесь в поддержку, прикрепив текст ниже:\n\n" "<code>\n" "{code}\n" "</code>"
)
CHECKOUT_PAYMENT_CHOICE = (
"в поддержку чирканите епта там всё обьяснят\n" + TEMP_SUPPORT_FORM
)
CALLBACK_FALLBACK = "❌ Что-то пошло не так"
CONTEXT_REINITIATED = "🔴 Контекст данного взаимодействия сброшен. Данные могут отличаться от указанных вами."
GENERAL_PROCESSING = "<i>⏳ Выполняю...</i>"
SUBSCRIPTION_DEVICE_SELECTOR = (
"выбери колво устройств епта. тут ещё цена есть смотри опа: {price}"
)
WHITELISTS_ALREADY_ON = "уже включены!"
SUBSCRIPTION_DURATION_SELECTOR = (
"тут короче сколько время. а ещё цена смотри ОПА {price}"
)
SUPPORT_INIT = f"<b>{MALENIA_SUPPORT} <i>Что-то не работает? Жалоба? Предложение?</i></b>\n— всё сюда, желательно со скриншотами. Чем детальнее описание, тем быстрее ответ.\n\n<i>❌ Для отмены — /cancel</i>"
SUPPORT_MSG_SENT = "⏳ Сообщение отправлено. Для выхода — /cancel, вы можете вернуться сюда из главного меню в любое время."
SUPPORT_SIGNATURE = "<b>✍️ Сообщение от технической поддержки:</b>"
ADMIN_TICKET_WITH_RW = (
"🎫 <b>ТИКЕТ T-{ticket_number:04d}</b>\n\n"
"👤 <b>Имя:</b> {full_name}\n"
"🔗 <b>Username:</b> {username_display}\n"
"🆔 <b>Telegram ID:</b> <code>{telegram_id}</code>\n\n"
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
"📋 <b>ПОДПИСКА REMNAWAVE</b>\n\n"
"{status_icon} <b>Статус:</b> {status}\n"
"📅 <b>Истекает:</b> {expire_date}\n"
"⏳ <b>Осталось:</b> {days_left}\n"
"📊 <b>Трафик:</b> {used_traffic}\n"
"📱 <b>HWID лимит:</b> {hwid_limit}\n"
"🎯 <b>Internal Squads:</b> {squads}\n\n"
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
"🔑 <b>UUID в Remnawave:</b> <code>{remnawave_uuid}</code>"
)
ADMIN_TICKET_WITHOUT_RW = (
"🎫 <b>ТИКЕТ T-{ticket_number:04d}</b>\n\n"
"👤 <b>Имя:</b> {full_name}\n"
"🔗 <b>Username:</b> {username_display}\n"
"🆔 <b>Telegram ID:</b> <code>{telegram_id}</code>\n\n"
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
"⚠️ <b>Аккаунт в Remnawave не найден</b>"
)
ADMIN_STANDARD_FALLBACK = (
"<b>❌ Что-то пошло не так</b>, обратитесь к логам для подробностей."
)
## FUNCTIONS
def build_main_menu_text() -> str:
return MAIN_MENU.format(quote=fetch_quote())
NO_USERNAME = "нет юзернейма"
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} дн.
DAYS_LEFT_POSITIVE = "{days} дн."
# Когда подписка уже истекла
DAYS_LEFT_EXPIRED = "истекла {days} дн. назад"
# Когда подписка истекает сегодня
DAYS_LEFT_TODAY = "истекает сегодня"
# Когда нет username в Telegram
NO_USERNAME = "нет username"
# Формат отображения username (с @)
USERNAME_DISPLAY = "@{username}"
# Когда у пользователя нет Internal Squads
NO_SQUADS = "нет"
# Когда лимит HWID не установлен (0 или None)
UNLIMITED_HWID = "без ограничений"
# Когда лимит трафика не установлен
NO_TRAFFIC_LIMIT = "без ограничений"
# Шаблон для отображения трафика с лимитом: {used} / {limit}
TRAFFIC_WITH_LIMIT = "{used} / {limit}"
# Шаблон для отображения трафика без лимита: {used}
TRAFFIC_NO_LIMIT = "{used}"
NOTHING_PLACEHOLDER = "🍃"