Update project configuration and codebase
This commit is contained in:
143
texts.py
143
texts.py
@@ -1,4 +1,3 @@
|
||||
from misc.utils import fetch_quote
|
||||
from db.models.tickets import TicketStatus
|
||||
|
||||
# ============================================================
|
||||
@@ -29,9 +28,9 @@ MALENIA_SUPPORT = PremiumEmoji(5275968088746006467, "🎧")
|
||||
# ============================================================
|
||||
|
||||
TICKET_STATUS_EMOJIS = {
|
||||
TicketStatus.CLOSED.value: "🔴",
|
||||
TicketStatus.OPEN.value: "🟢",
|
||||
TicketStatus.PENDING.value: "🟡",
|
||||
TicketStatus.CLOSED.value: "🌑", # Более сдержанно
|
||||
TicketStatus.OPEN.value: "📡", # В эфире
|
||||
TicketStatus.PENDING.value: "⏳",
|
||||
}
|
||||
|
||||
|
||||
@@ -41,17 +40,17 @@ TICKET_STATUS_EMOJIS = {
|
||||
|
||||
# — Иконки статусов
|
||||
STATUS_ICON_ACTIVE = "🟢"
|
||||
STATUS_ICON_DISABLED = "🔴"
|
||||
STATUS_ICON_EXPIRED = "🟡"
|
||||
STATUS_ICON_DISABLED = "⚪"
|
||||
STATUS_ICON_EXPIRED = "🔴"
|
||||
STATUS_ICON_LIMITED = "🟠"
|
||||
STATUS_ICON_UNKNOWN = "⚪"
|
||||
STATUS_ICON_UNKNOWN = "❓"
|
||||
|
||||
# — Тексты статусов
|
||||
STATUS_ACTIVE = "Активна"
|
||||
STATUS_DISABLED = "Отключена"
|
||||
STATUS_EXPIRED = "Истекла"
|
||||
STATUS_LIMITED = "Превышен лимит трафика"
|
||||
STATUS_UNKNOWN = "Неизвестен"
|
||||
STATUS_ACTIVE = "работает"
|
||||
STATUS_DISABLED = "отключена"
|
||||
STATUS_EXPIRED = "срок вышел"
|
||||
STATUS_LIMITED = "трафик на нуле"
|
||||
STATUS_UNKNOWN = "выясняем"
|
||||
|
||||
|
||||
# ============================================================
|
||||
@@ -61,25 +60,25 @@ STATUS_UNKNOWN = "Неизвестен"
|
||||
# — Дни до истечения подписки
|
||||
DAYS_LEFT_POSITIVE = "{days} дн."
|
||||
DAYS_LEFT_EXPIRED = "истекла {days} дн. назад"
|
||||
DAYS_LEFT_TODAY = "истекает сегодня"
|
||||
DAYS_LEFT_TODAY = "доживает последний день"
|
||||
|
||||
# — Username
|
||||
NO_USERNAME = "нет username"
|
||||
NO_USERNAME = "скрыт"
|
||||
USERNAME_DISPLAY = "@{username}"
|
||||
|
||||
# — Internal Squads
|
||||
NO_SQUADS = "нет"
|
||||
NO_SQUADS = "отсутствуют"
|
||||
|
||||
# — HWID лимит
|
||||
UNLIMITED_HWID = "без ограничений"
|
||||
UNLIMITED_HWID = "без лимитов"
|
||||
|
||||
# — Трафик
|
||||
NO_TRAFFIC_LIMIT = "без ограничений"
|
||||
NO_TRAFFIC_LIMIT = "не ограничен"
|
||||
TRAFFIC_WITH_LIMIT = "{used} / {limit}"
|
||||
TRAFFIC_NO_LIMIT = "{used}"
|
||||
|
||||
# — Прочее
|
||||
NOTHING_PLACEHOLDER = "🍃"
|
||||
NOTHING_PLACEHOLDER = "∅"
|
||||
|
||||
|
||||
# ============================================================
|
||||
@@ -90,23 +89,23 @@ MAIN_MENU = (
|
||||
str(MALENIA_LOGO)
|
||||
+ " <b>Malenia — <i>{quote}</i></b>\n\n"
|
||||
+ f"<i>{MALENIA_COINS} Личный кабинет</i>\n"
|
||||
+ f"<b>{MALENIA_LINK} Ваша ссылка на подписку: {{link}}</b>"
|
||||
+ f"<b>{MALENIA_LINK} Ключ доступа: <code>{{link}}</code></b>"
|
||||
)
|
||||
|
||||
FAQ_TEXT = "faq"
|
||||
|
||||
GENERAL_PROCESSING = "<i>⏳ Выполняю...</i>"
|
||||
|
||||
STANDARD_FALLBACK = (
|
||||
"<b>❌ Что-то пошло не так</b>, прожмите /start и повторите попытку позже."
|
||||
FAQ_TEXT = (
|
||||
"<b>FAQ: Технический минимум</b>\n\n"
|
||||
"Здесь нет магии и «инновационных прорывов». Только обфускация трафика и стабильные узлы. "
|
||||
"Если что-то не грузится — скорее всего, фильтры опять пробуют новые сигнатуры. "
|
||||
"Мы это уже чиним."
|
||||
)
|
||||
|
||||
CALLBACK_FALLBACK = "❌ Что-то пошло не так"
|
||||
GENERAL_PROCESSING = "<i>⏳ Проверяем пакеты...</i>"
|
||||
|
||||
CONTEXT_REINITIATED = (
|
||||
"🔴 Контекст данного взаимодействия сброшен. "
|
||||
"Данные могут отличаться от указанных вами."
|
||||
)
|
||||
STANDARD_FALLBACK = "<b>❌ Ошибка в логике.</b> Прожмите /start. Если не поможет — значит, мы где-то не доглядели за кодом."
|
||||
|
||||
CALLBACK_FALLBACK = "❌ Пакет потерян, попробуйте снова"
|
||||
|
||||
CONTEXT_REINITIATED = "🌑 Сессия сброшена. Данные могли обновиться."
|
||||
|
||||
|
||||
# ============================================================
|
||||
@@ -115,9 +114,10 @@ CONTEXT_REINITIATED = (
|
||||
|
||||
REFERALS_MENU = (
|
||||
"<b>👥 Реферальная система</b>\n\n"
|
||||
f"<b>{MALENIA_COINS} Ваш реферальный баланс:</b> "
|
||||
"Никакого сетевого маркетинга, просто делимся ресурсами.\n"
|
||||
f"<b>{MALENIA_COINS} На вашем счету:</b> "
|
||||
"<code>{balance}₽</code>\n"
|
||||
f"<b>{MALENIA_LINK} Ваша реферальная ссылка:</b> "
|
||||
f"<b>{MALENIA_LINK} Ссылка для своих:</b> "
|
||||
"<code>{link}</code>"
|
||||
)
|
||||
|
||||
@@ -126,19 +126,15 @@ REFERALS_MENU = (
|
||||
# ============================================================
|
||||
|
||||
SUBSCRIPTION_DEVICE_SELECTOR = (
|
||||
"выбери колво устройств епта. тут ещё цена есть смотри опа: {price}"
|
||||
"Сколько девайсов нужно держать в сети одновременно?\n\nЦена вопроса: <b>{price}₽</b>"
|
||||
)
|
||||
|
||||
SUBSCRIPTION_DURATION_SELECTOR = (
|
||||
"тут короче сколько время. а ещё цена смотри ОПА {price}"
|
||||
)
|
||||
SUBSCRIPTION_DURATION_SELECTOR = "На какой срок планируем инфраструктуру?\n\nИтого: <b>{price}₽</b>"
|
||||
|
||||
WHITELISTS_ALREADY_ON = "уже включены!"
|
||||
|
||||
TEMP_SUPPORT_FORM = "обратитесь в поддержку, прикрепив текст ниже:\n\n"
|
||||
WHITELISTS_ALREADY_ON = "Списки доступа уже активны."
|
||||
|
||||
CHECKOUT_PAYMENT_CHOICE = (
|
||||
"в поддержку чирканите епта там всё обьяснят\n" + TEMP_SUPPORT_FORM
|
||||
"Автоплатежи — это не к нам. Стукните в поддержку, там объяснят, куда слать деньги."
|
||||
)
|
||||
|
||||
|
||||
@@ -147,33 +143,29 @@ CHECKOUT_PAYMENT_CHOICE = (
|
||||
# ============================================================
|
||||
|
||||
SUPPORT_INIT = (
|
||||
f"<b>{MALENIA_SUPPORT} <i>Что-то не работает? Жалоба? Предложение?</i></b>\n"
|
||||
"— всё сюда, желательно со скриншотами. "
|
||||
"Чем детальнее описание, тем быстрее ответ.\n\n"
|
||||
"<i>❌ Для отмены — /cancel</i>"
|
||||
f"<b>{MALENIA_SUPPORT} Технический отдел</b>\n"
|
||||
"— если интернет превратился в тыкву или есть идеи по конфигам.\n"
|
||||
"Пишите по делу, скриншоты приветствуются.\n\n"
|
||||
"<i>🌑 /cancel — вернуться к делам</i>"
|
||||
)
|
||||
|
||||
SUPPORT_MSG_SENT = (
|
||||
"⏳ Сообщение отправлено. Для выхода — /cancel, "
|
||||
"вы можете вернуться сюда из главного меню в любое время."
|
||||
)
|
||||
SUPPORT_MSG_SENT = "⏳ Принято. Инженеры посмотрят, как освободятся. " "Вернуться в меню: /cancel"
|
||||
|
||||
SUPPORT_SIGNATURE = "<b>✍️ Сообщение от технической поддержки:</b>"
|
||||
SUPPORT_SIGNATURE = "<b>📡 Ответ от Malenia Team:</b>"
|
||||
|
||||
|
||||
# ============================================================
|
||||
# ШАБЛОНЫ — ОБЩИЕ БЛОКИ
|
||||
# ============================================================
|
||||
|
||||
# Используется в SUPPORT_SUBSCRIPTION и ADMIN_TICKET_WITH_RW
|
||||
_SUPPORT_USER_DESCRIPTION = (
|
||||
"👤 <b>Имя:</b> {full_name}\n"
|
||||
"🔗 <b>Username:</b> {username_display}\n"
|
||||
"🆔 <b>Telegram ID:</b> <code>{telegram_id}</code>\n\n"
|
||||
"💰 <b>Реферальный баланс:</b> <code>{balance}</code>"
|
||||
"👤 <b>Профиль:</b> {full_name}\n"
|
||||
"🔗 <b>Alias:</b> {username_display}\n"
|
||||
"🆔 <b>UID:</b> <code>{telegram_id}</code>\n\n"
|
||||
"💰 <b>Баланс:</b> <code>{balance}</code>"
|
||||
)
|
||||
|
||||
_DIVIDER = "━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
|
||||
_DIVIDER = "────────────────────────────\n\n"
|
||||
|
||||
|
||||
# ============================================================
|
||||
@@ -181,14 +173,14 @@ _DIVIDER = "━━━━━━━━━━━━━━━━━━━━━━
|
||||
# ============================================================
|
||||
|
||||
SUPPORT_SUBSCRIPTION = (
|
||||
"<b>🎫 ЗАЯВКА НА ПОКУПКУ:</b>\n\n"
|
||||
"<b>🎫 ВХОДЯЩИЙ ЗАПРОС:</b>\n\n"
|
||||
+ _SUPPORT_USER_DESCRIPTION
|
||||
+ "\n"
|
||||
+ _DIVIDER
|
||||
+ "🗓️ Подписка на <b>{duration}</b> месяцев.\n"
|
||||
+ "📱 Количество устройств: <b>{devices}</b>\n"
|
||||
+ "🏳️ Белые списки: <b>{whitelist_description}</b>\n\n"
|
||||
+ "💰 Итого: <b>{price}₽</b>"
|
||||
+ "🗓️ Срок: <b>{duration} мес.</b>\n"
|
||||
+ "📱 Устройства: <b>{devices}</b>\n"
|
||||
+ "🏳️ Whitelists: <b>{whitelist_description}</b>\n\n"
|
||||
+ "💰 К оплате: <b>{price}₽</b>"
|
||||
)
|
||||
|
||||
ADMIN_TICKET_WITH_RW = (
|
||||
@@ -196,35 +188,24 @@ ADMIN_TICKET_WITH_RW = (
|
||||
+ _SUPPORT_USER_DESCRIPTION
|
||||
+ "\n"
|
||||
+ _DIVIDER
|
||||
+ "📋 <b>ПОДПИСКА REMNAWAVE</b>\n\n"
|
||||
+ "📊 <b>ТЕХ. ДАННЫЕ (Remnawave)</b>\n\n"
|
||||
+ "{status_icon} <b>Статус:</b> {status}\n"
|
||||
+ "📅 <b>Истекает:</b> {expire_date}\n"
|
||||
+ "⏳ <b>Осталось:</b> {days_left}\n"
|
||||
+ "📅 <b>Deadline:</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"
|
||||
+ "📱 <b>HWID:</b> {hwid_limit}\n"
|
||||
+ "🎯 <b>Squads:</b> {squads}\n\n"
|
||||
+ _DIVIDER
|
||||
+ "🔑 <b>UUID в Remnawave:</b> <code>{remnawave_uuid}</code>"
|
||||
+ "🔑 <b>UUID:</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"
|
||||
"🔗 <b>Alias:</b> {username_display}\n"
|
||||
"🆔 <b>UID:</b> <code>{telegram_id}</code>\n\n"
|
||||
+ _DIVIDER
|
||||
+ "⚠️ <b>Аккаунт в Remnawave не найден</b>"
|
||||
+ "⚠️ <b>Remnawave-профиль отсутствует</b>"
|
||||
)
|
||||
|
||||
ADMIN_STANDARD_FALLBACK = (
|
||||
"<b>❌ Что-то пошло не так</b>, обратитесь к логам для подробностей."
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ
|
||||
# ============================================================
|
||||
|
||||
|
||||
def build_main_menu_text(link: str) -> str:
|
||||
return MAIN_MENU.format(quote=fetch_quote(), link=link)
|
||||
ADMIN_STANDARD_FALLBACK = "<b>❌ Ошибка выполнения.</b> Проверь логи, что-то пошло не по чертежу."
|
||||
|
||||
Reference in New Issue
Block a user