Add referral system and user balance tracking
Introduce balance field to User model with Alembic migration. Add referral menu, admin /refpay command, and deep link sharing. Update Dockerfile to multi-stage build and add Postgres service to compose. Fix deep link parsing logic and conditional proxy initialization.
This commit is contained in:
67
texts.py
67
texts.py
@@ -1,11 +1,11 @@
|
||||
from misc.utils import fetch_quote
|
||||
from db.models.tickets import TicketStatus
|
||||
|
||||
|
||||
# ============================================================
|
||||
# PREMIUM EMOJI
|
||||
# ============================================================
|
||||
|
||||
|
||||
class PremiumEmoji:
|
||||
def __init__(self, emoji_id: int, emoji: str):
|
||||
self.emoji_id = emoji_id
|
||||
@@ -16,11 +16,11 @@ class PremiumEmoji:
|
||||
|
||||
|
||||
# — Иконки бота
|
||||
MALENIA_LOGO = PremiumEmoji(5265053829522562789, "☀️")
|
||||
MALENIA_HEART = PremiumEmoji(5276516908257025723, "❤️")
|
||||
MALENIA_LINK = PremiumEmoji(5276012730636082950, "🔗")
|
||||
MALENIA_COINS = PremiumEmoji(5276298354551199712, "🪙")
|
||||
MALENIA_LOCKED = PremiumEmoji(5276346642868508688, "🔒")
|
||||
MALENIA_LOGO = PremiumEmoji(5265053829522562789, "☀️")
|
||||
MALENIA_HEART = PremiumEmoji(5276516908257025723, "❤️")
|
||||
MALENIA_LINK = PremiumEmoji(5276012730636082950, "🔗")
|
||||
MALENIA_COINS = PremiumEmoji(5276298354551199712, "🪙")
|
||||
MALENIA_LOCKED = PremiumEmoji(5276346642868508688, "🔒")
|
||||
MALENIA_SUPPORT = PremiumEmoji(5275968088746006467, "🎧")
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ MALENIA_SUPPORT = PremiumEmoji(5275968088746006467, "🎧")
|
||||
# ============================================================
|
||||
|
||||
TICKET_STATUS_EMOJIS = {
|
||||
TicketStatus.CLOSED.value: "🔴",
|
||||
TicketStatus.OPEN.value: "🟢",
|
||||
TicketStatus.CLOSED.value: "🔴",
|
||||
TicketStatus.OPEN.value: "🟢",
|
||||
TicketStatus.PENDING.value: "🟡",
|
||||
}
|
||||
|
||||
@@ -40,18 +40,18 @@ TICKET_STATUS_EMOJIS = {
|
||||
# ============================================================
|
||||
|
||||
# — Иконки статусов
|
||||
STATUS_ICON_ACTIVE = "🟢"
|
||||
STATUS_ICON_ACTIVE = "🟢"
|
||||
STATUS_ICON_DISABLED = "🔴"
|
||||
STATUS_ICON_EXPIRED = "🟡"
|
||||
STATUS_ICON_LIMITED = "🟠"
|
||||
STATUS_ICON_UNKNOWN = "⚪"
|
||||
STATUS_ICON_EXPIRED = "🟡"
|
||||
STATUS_ICON_LIMITED = "🟠"
|
||||
STATUS_ICON_UNKNOWN = "⚪"
|
||||
|
||||
# — Тексты статусов
|
||||
STATUS_ACTIVE = "Активна"
|
||||
STATUS_ACTIVE = "Активна"
|
||||
STATUS_DISABLED = "Отключена"
|
||||
STATUS_EXPIRED = "Истекла"
|
||||
STATUS_LIMITED = "Превышен лимит трафика"
|
||||
STATUS_UNKNOWN = "Неизвестен"
|
||||
STATUS_EXPIRED = "Истекла"
|
||||
STATUS_LIMITED = "Превышен лимит трафика"
|
||||
STATUS_UNKNOWN = "Неизвестен"
|
||||
|
||||
|
||||
# ============================================================
|
||||
@@ -60,11 +60,11 @@ STATUS_UNKNOWN = "Неизвестен"
|
||||
|
||||
# — Дни до истечения подписки
|
||||
DAYS_LEFT_POSITIVE = "{days} дн."
|
||||
DAYS_LEFT_EXPIRED = "истекла {days} дн. назад"
|
||||
DAYS_LEFT_TODAY = "истекает сегодня"
|
||||
DAYS_LEFT_EXPIRED = "истекла {days} дн. назад"
|
||||
DAYS_LEFT_TODAY = "истекает сегодня"
|
||||
|
||||
# — Username
|
||||
NO_USERNAME = "нет username"
|
||||
NO_USERNAME = "нет username"
|
||||
USERNAME_DISPLAY = "@{username}"
|
||||
|
||||
# — Internal Squads
|
||||
@@ -74,9 +74,9 @@ NO_SQUADS = "нет"
|
||||
UNLIMITED_HWID = "без ограничений"
|
||||
|
||||
# — Трафик
|
||||
NO_TRAFFIC_LIMIT = "без ограничений"
|
||||
NO_TRAFFIC_LIMIT = "без ограничений"
|
||||
TRAFFIC_WITH_LIMIT = "{used} / {limit}"
|
||||
TRAFFIC_NO_LIMIT = "{used}"
|
||||
TRAFFIC_NO_LIMIT = "{used}"
|
||||
|
||||
# — Прочее
|
||||
NOTHING_PLACEHOLDER = "🍃"
|
||||
@@ -109,6 +109,18 @@ CONTEXT_REINITIATED = (
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# РЕФЕРАЛЬНАЯ СИСТЕМА
|
||||
# ============================================================
|
||||
|
||||
REFERALS_MENU = (
|
||||
"<b>👥 Реферальная система</b>\n\n"
|
||||
f"<b>{MALENIA_COINS} Ваш реферальный баланс:</b> "
|
||||
"<code>{balance}₽</code>\n"
|
||||
f"<b>{MALENIA_LINK} Ваша реферальная ссылка:</b> "
|
||||
"<code>{link}</code>"
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# ОФОРМЛЕНИЕ ПОДПИСКИ
|
||||
# ============================================================
|
||||
@@ -126,8 +138,7 @@ WHITELISTS_ALREADY_ON = "уже включены!"
|
||||
TEMP_SUPPORT_FORM = "обратитесь в поддержку, прикрепив текст ниже:\n\n"
|
||||
|
||||
CHECKOUT_PAYMENT_CHOICE = (
|
||||
"в поддержку чирканите епта там всё обьяснят\n"
|
||||
+ TEMP_SUPPORT_FORM
|
||||
"в поддержку чирканите епта там всё обьяснят\n" + TEMP_SUPPORT_FORM
|
||||
)
|
||||
|
||||
|
||||
@@ -159,6 +170,7 @@ _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>"
|
||||
)
|
||||
|
||||
_DIVIDER = "━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
|
||||
@@ -171,7 +183,8 @@ _DIVIDER = "━━━━━━━━━━━━━━━━━━━━━━
|
||||
SUPPORT_SUBSCRIPTION = (
|
||||
"<b>🎫 ЗАЯВКА НА ПОКУПКУ:</b>\n\n"
|
||||
+ _SUPPORT_USER_DESCRIPTION
|
||||
+ "\n" + _DIVIDER
|
||||
+ "\n"
|
||||
+ _DIVIDER
|
||||
+ "🗓️ Подписка на <b>{duration}</b> месяцев.\n"
|
||||
+ "📱 Количество устройств: <b>{devices}</b>\n"
|
||||
+ "🏳️ Белые списки: <b>{whitelist_description}</b>\n\n"
|
||||
@@ -181,7 +194,8 @@ SUPPORT_SUBSCRIPTION = (
|
||||
ADMIN_TICKET_WITH_RW = (
|
||||
"🎫 <b>ТИКЕТ T-{ticket_number:04d}</b>\n\n"
|
||||
+ _SUPPORT_USER_DESCRIPTION
|
||||
+ "\n" + _DIVIDER
|
||||
+ "\n"
|
||||
+ _DIVIDER
|
||||
+ "📋 <b>ПОДПИСКА REMNAWAVE</b>\n\n"
|
||||
+ "{status_icon} <b>Статус:</b> {status}\n"
|
||||
+ "📅 <b>Истекает:</b> {expire_date}\n"
|
||||
@@ -211,5 +225,6 @@ ADMIN_STANDARD_FALLBACK = (
|
||||
# ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ
|
||||
# ============================================================
|
||||
|
||||
|
||||
def build_main_menu_text(link: str) -> str:
|
||||
return MAIN_MENU.format(quote=fetch_quote(), link=link)
|
||||
return MAIN_MENU.format(quote=fetch_quote(), link=link)
|
||||
|
||||
Reference in New Issue
Block a user