Update .env.example and enhance notification service for suspicious promo attempts
- Revised the .env.example file to include new configuration options for Telegram bot settings, database credentials, and payment gateways, ensuring clarity and ease of use. - Implemented a new method in the NotificationService to notify admins of suspicious promo code attempts, enhancing security and monitoring capabilities. - Updated localization files to include messages related to suspicious promo code attempts in both English and Russian, improving admin awareness and response.
This commit is contained in:
+83
-69
@@ -1,69 +1,69 @@
|
|||||||
# Telegram Bot Token and Admin IDs
|
# Telegram Bot
|
||||||
BOT_TOKEN=your_bot_token_here
|
BOT_TOKEN=
|
||||||
ADMIN_IDS=comma_separated_admin_ids
|
ADMIN_IDS=
|
||||||
|
DEFAULT_LANGUAGE=ru
|
||||||
|
DEFAULT_CURRENCY_SYMBOL=RUB
|
||||||
|
SUPPORT_LINK=
|
||||||
|
SERVER_STATUS_URL=
|
||||||
|
TERMS_OF_SERVICE_URL=
|
||||||
|
|
||||||
POSTGRES_USER=postgres
|
# Database
|
||||||
POSTGRES_PASSWORD=postgres
|
POSTGRES_USER=user
|
||||||
POSTGRES_HOST=remnawave-tg-shop-db
|
POSTGRES_PASSWORD=password
|
||||||
|
POSTGRES_HOST=db
|
||||||
POSTGRES_PORT=5432
|
POSTGRES_PORT=5432
|
||||||
POSTGRES_DB=postgres
|
POSTGRES_DB=vpn_shop_db
|
||||||
|
|
||||||
# Localization and Display
|
# Webhooks
|
||||||
DEFAULT_LANGUAGE="ru" # or "en"
|
WEBHOOK_BASE_URL=
|
||||||
DEFAULT_CURRENCY_SYMBOL="RUB" # e.g., RUB, USD, EUR
|
PANEL_WEBHOOK_SECRET=
|
||||||
|
|
||||||
# External Links
|
# YooKassa
|
||||||
SUPPORT_LINK=https://t.me/your_support_link
|
YOOKASSA_ENABLED=True
|
||||||
SERVER_STATUS_URL=https://status.yourdomain.tld/status/your_service
|
YOOKASSA_SHOP_ID=
|
||||||
TERMS_OF_SERVICE_URL=https://example.com/tos
|
YOOKASSA_SECRET_KEY=
|
||||||
SUBSCRIPTION_MINI_APP_URL=
|
YOOKASSA_RETURN_URL=
|
||||||
START_COMMAND_DESCRIPTION=
|
YOOKASSA_DEFAULT_RECEIPT_EMAIL=
|
||||||
|
|
||||||
# Webhook Base URL (used for Telegram and payment providers)
|
|
||||||
WEBHOOK_BASE_URL=https://webhooks.yourdomain.tld
|
|
||||||
|
|
||||||
# YooKassa Payment Gateway Configuration
|
|
||||||
YOOKASSA_SHOP_ID=your_shop_id
|
|
||||||
YOOKASSA_SECRET_KEY=your_secret_key
|
|
||||||
YOOKASSA_RETURN_URL=https://t.me/your_bot
|
|
||||||
YOOKASSA_DEFAULT_RECEIPT_EMAIL=your_email@example.com
|
|
||||||
YOOKASSA_VAT_CODE=1
|
YOOKASSA_VAT_CODE=1
|
||||||
YOOKASSA_PAYMENT_MODE=full_prepayment
|
YOOKASSA_PAYMENT_MODE=full_prepayment
|
||||||
YOOKASSA_PAYMENT_SUBJECT=payment
|
YOOKASSA_PAYMENT_SUBJECT=service
|
||||||
|
|
||||||
# CryptoBot Payment Gateway Configuration
|
# CryptoPay
|
||||||
|
CRYPTOPAY_ENABLED=True
|
||||||
CRYPTOPAY_TOKEN=
|
CRYPTOPAY_TOKEN=
|
||||||
CRYPTOPAY_NETWORK=mainnet
|
CRYPTOPAY_NETWORK=mainnet
|
||||||
CRYPTOPAY_CURRENCY_TYPE=fiat
|
CRYPTOPAY_CURRENCY_TYPE=fiat
|
||||||
CRYPTOPAY_ASSET=RUB
|
CRYPTOPAY_ASSET=RUB
|
||||||
# API key for verifying Tribute webhook signatures
|
|
||||||
|
# Telegram Stars
|
||||||
|
STARS_ENABLED=True
|
||||||
|
|
||||||
|
# Telegram Tribute
|
||||||
|
TRIBUTE_ENABLED=True
|
||||||
TRIBUTE_API_KEY=
|
TRIBUTE_API_KEY=
|
||||||
|
|
||||||
# Payment Method Toggles
|
# Subscription Durations
|
||||||
YOOKASSA_ENABLED=True
|
|
||||||
STARS_ENABLED=True
|
|
||||||
TRIBUTE_ENABLED=True
|
|
||||||
CRYPTOPAY_ENABLED=True
|
|
||||||
|
|
||||||
# Subscription Options
|
|
||||||
1_MONTH_ENABLED=True
|
1_MONTH_ENABLED=True
|
||||||
RUB_PRICE_1_MONTH=150
|
|
||||||
STARS_PRICE_1_MONTH=0
|
|
||||||
TRIBUTE_LINK_1_MONTH=
|
|
||||||
|
|
||||||
3_MONTHS_ENABLED=True
|
3_MONTHS_ENABLED=True
|
||||||
RUB_PRICE_3_MONTHS=300
|
|
||||||
STARS_PRICE_3_MONTHS=0
|
|
||||||
TRIBUTE_LINK_3_MONTHS=
|
|
||||||
|
|
||||||
6_MONTHS_ENABLED=True
|
6_MONTHS_ENABLED=True
|
||||||
RUB_PRICE_6_MONTHS=500
|
|
||||||
STARS_PRICE_6_MONTHS=0
|
|
||||||
TRIBUTE_LINK_6_MONTHS=
|
|
||||||
|
|
||||||
12_MONTHS_ENABLED=True
|
12_MONTHS_ENABLED=True
|
||||||
RUB_PRICE_12_MONTHS=900
|
|
||||||
STARS_PRICE_12_MONTHS=0
|
# Prices in RUB
|
||||||
|
RUB_PRICE_1_MONTH=
|
||||||
|
RUB_PRICE_3_MONTHS=
|
||||||
|
RUB_PRICE_6_MONTHS=
|
||||||
|
RUB_PRICE_12_MONTHS=
|
||||||
|
|
||||||
|
# Prices in Telegram Stars
|
||||||
|
STARS_PRICE_1_MONTH=
|
||||||
|
STARS_PRICE_3_MONTHS=
|
||||||
|
STARS_PRICE_6_MONTHS=
|
||||||
|
STARS_PRICE_12_MONTHS=
|
||||||
|
|
||||||
|
# Tribute Payment Links
|
||||||
|
TRIBUTE_LINK_1_MONTH=
|
||||||
|
TRIBUTE_LINK_3_MONTHS=
|
||||||
|
TRIBUTE_LINK_6_MONTHS=
|
||||||
TRIBUTE_LINK_12_MONTHS=
|
TRIBUTE_LINK_12_MONTHS=
|
||||||
|
|
||||||
# Subscription Notifications
|
# Subscription Notifications
|
||||||
@@ -72,38 +72,52 @@ SUBSCRIPTION_NOTIFY_ON_EXPIRE=True
|
|||||||
SUBSCRIPTION_NOTIFY_AFTER_EXPIRE=True
|
SUBSCRIPTION_NOTIFY_AFTER_EXPIRE=True
|
||||||
SUBSCRIPTION_NOTIFY_DAYS_BEFORE=3
|
SUBSCRIPTION_NOTIFY_DAYS_BEFORE=3
|
||||||
|
|
||||||
# Referral Bonus Days
|
# Referral Bonuses (Inviter)
|
||||||
REFERRAL_BONUS_DAYS_1_MONTH=3
|
REFERRAL_BONUS_DAYS_1_MONTH=3
|
||||||
REFERRAL_BONUS_DAYS_3_MONTHS=7
|
REFERRAL_BONUS_DAYS_3_MONTHS=7
|
||||||
REFERRAL_BONUS_DAYS_6_MONTHS=15
|
REFERRAL_BONUS_DAYS_6_MONTHS=15
|
||||||
REFERRAL_BONUS_DAYS_12_MONTHS=30
|
REFERRAL_BONUS_DAYS_12_MONTHS=30
|
||||||
|
|
||||||
|
# Referral Bonuses (Referee)
|
||||||
REFEREE_BONUS_DAYS_1_MONTH=1
|
REFEREE_BONUS_DAYS_1_MONTH=1
|
||||||
REFEREE_BONUS_DAYS_3_MONTHS=3
|
REFEREE_BONUS_DAYS_3_MONTHS=3
|
||||||
REFEREE_BONUS_DAYS_6_MONTHS=7
|
REFEREE_BONUS_DAYS_6_MONTHS=7
|
||||||
REFEREE_BONUS_DAYS_12_MONTHS=15
|
REFEREE_BONUS_DAYS_12_MONTHS=15
|
||||||
|
|
||||||
# Panel API Configuration
|
# Panel Integration
|
||||||
PANEL_API_URL=http://your_panel_api_url/api
|
PANEL_API_URL=
|
||||||
PANEL_API_KEY=your_panel_api_key
|
PANEL_API_KEY=
|
||||||
PANEL_WEBHOOK_SECRET= # secret used to verify panel webhook signatures
|
|
||||||
|
|
||||||
# User traffic limits (applied for all users)
|
|
||||||
# 0 means unlimited
|
|
||||||
USER_TRAFFIC_LIMIT_GB=0
|
USER_TRAFFIC_LIMIT_GB=0
|
||||||
USER_TRAFFIC_STRATEGY="NO_RESET"
|
USER_TRAFFIC_STRATEGY=NO_RESET
|
||||||
|
USER_SQUAD_UUIDS=
|
||||||
|
|
||||||
# Default Internal Squads for Users (Optional, comma-separated UUIDs)
|
# Trial Period
|
||||||
USER_SQUAD_UUIDS=uuid1,uuid2,uuid3
|
|
||||||
|
|
||||||
# Trial Settings
|
|
||||||
TRIAL_ENABLED=True
|
TRIAL_ENABLED=True
|
||||||
TRIAL_DURATION_DAYS=5
|
TRIAL_DURATION_DAYS=3
|
||||||
TRIAL_TRAFFIC_LIMIT_GB=0 # 0 for unlimited
|
TRIAL_TRAFFIC_LIMIT_GB=5.0
|
||||||
TRIAL_TRAFFIC_STRATEGY="NO_RESET"
|
|
||||||
|
|
||||||
# Web Server Settings (for handling webhooks)
|
# Web Server
|
||||||
WEB_SERVER_HOST="0.0.0.0"
|
WEB_SERVER_HOST=0.0.0.0
|
||||||
WEB_SERVER_PORT=8080
|
WEB_SERVER_PORT=8080
|
||||||
|
|
||||||
# Admin Panel Log Pagination
|
|
||||||
LOGS_PAGE_SIZE=10
|
LOGS_PAGE_SIZE=10
|
||||||
|
|
||||||
|
# Mini App
|
||||||
|
SUBSCRIPTION_MINI_APP_URL=
|
||||||
|
|
||||||
|
# Customization
|
||||||
|
START_COMMAND_DESCRIPTION=
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
LOG_CHAT_ID=
|
||||||
|
LOG_THREAD_ID=
|
||||||
|
LOG_NEW_USERS=True
|
||||||
|
LOG_PAYMENTS=True
|
||||||
|
LOG_PROMO_ACTIVATIONS=True
|
||||||
|
LOG_TRIAL_ACTIVATIONS=True
|
||||||
|
LOG_SUSPICIOUS_ACTIVITY=True
|
||||||
|
|
||||||
|
# Inline Thumbnails
|
||||||
|
INLINE_REFERRAL_THUMBNAIL_URL=https://cdn-icons-png.flaticon.com/512/1077/1077114.png
|
||||||
|
INLINE_USER_STATS_THUMBNAIL_URL=https://cdn-icons-png.flaticon.com/512/681/681494.png
|
||||||
|
INLINE_FINANCIAL_STATS_THUMBNAIL_URL=https://cdn-icons-png.flaticon.com/512/2769/2769339.png
|
||||||
|
INLINE_SYSTEM_STATS_THUMBNAIL_URL=https://cdn-icons-png.flaticon.com/512/2920/2920277.png
|
||||||
|
|||||||
@@ -188,6 +188,37 @@ class NotificationService:
|
|||||||
|
|
||||||
# Send to log channel
|
# Send to log channel
|
||||||
await self._send_to_log_channel(message)
|
await self._send_to_log_channel(message)
|
||||||
|
|
||||||
|
async def notify_suspicious_promo_attempt(
|
||||||
|
self, user_id: int, suspicious_input: str,
|
||||||
|
username: Optional[str] = None, first_name: Optional[str] = None):
|
||||||
|
"""Send notification about a suspicious promo code attempt."""
|
||||||
|
if not self.settings.LOG_SUSPICIOUS_ACTIVITY:
|
||||||
|
return
|
||||||
|
|
||||||
|
admin_lang = self.settings.DEFAULT_LANGUAGE
|
||||||
|
_ = lambda k, **kw: self.i18n.gettext(
|
||||||
|
admin_lang, k, **kw) if self.i18n else k
|
||||||
|
|
||||||
|
user_display = first_name or f"ID {user_id}"
|
||||||
|
if username:
|
||||||
|
user_display += f" (@{username})"
|
||||||
|
|
||||||
|
message = _(
|
||||||
|
"log_suspicious_promo",
|
||||||
|
default="⚠️ <b>Подозрительная попытка ввода промокода</b>\n\n"
|
||||||
|
"👤 Пользователь: {user_display}\n"
|
||||||
|
"🆔 ID: <code>{user_id}</code>\n"
|
||||||
|
"📝 Ввод: <pre>{suspicious_input}</pre>\n"
|
||||||
|
"🕐 Время: {timestamp}",
|
||||||
|
user_display=hd.quote(user_display),
|
||||||
|
user_id=user_id,
|
||||||
|
suspicious_input=hd.quote(suspicious_input),
|
||||||
|
timestamp=datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S %Z"))
|
||||||
|
|
||||||
|
# Send to log channel and admins
|
||||||
|
await self._send_to_log_channel(message)
|
||||||
|
await self._send_to_admins(message)
|
||||||
|
|
||||||
async def send_custom_notification(self, message: str, to_admins: bool = False,
|
async def send_custom_notification(self, message: str, to_admins: bool = False,
|
||||||
to_log_channel: bool = True, thread_id: Optional[int] = None):
|
to_log_channel: bool = True, thread_id: Optional[int] = None):
|
||||||
|
|||||||
+2
-21
@@ -271,10 +271,6 @@
|
|||||||
"admin_user_logs_error": "❌ Error loading user actions",
|
"admin_user_logs_error": "❌ Error loading user actions",
|
||||||
"admin_direct_message_signature": "\n\n---\n💬 Message from administrator",
|
"admin_direct_message_signature": "\n\n---\n💬 Message from administrator",
|
||||||
|
|
||||||
|
|
||||||
"inline_referral_title": "🎁 Invite a Friend",
|
|
||||||
"inline_referral_description": "Share referral link to get bonuses",
|
|
||||||
|
|
||||||
"inline_user_stats_message": "👥 <b>User Statistics</b>\n\n📊 Total: <b>{total}</b>\n📈 Active today: <b>{active_today}</b>\n💳 With paid subscription: <b>{paid}</b>\n🆓 On trial period: <b>{trial}</b>\n😴 Inactive: <b>{inactive}</b>\n🚫 Banned: <b>{banned}</b>\n🎁 Via referral program: <b>{referral}</b>",
|
"inline_user_stats_message": "👥 <b>User Statistics</b>\n\n📊 Total: <b>{total}</b>\n📈 Active today: <b>{active_today}</b>\n💳 With paid subscription: <b>{paid}</b>\n🆓 On trial period: <b>{trial}</b>\n😴 Inactive: <b>{inactive}</b>\n🚫 Banned: <b>{banned}</b>\n🎁 Via referral program: <b>{referral}</b>",
|
||||||
"inline_admin_user_stats_title": "👥 User Statistics",
|
"inline_admin_user_stats_title": "👥 User Statistics",
|
||||||
"inline_admin_user_stats_desc": "Total: {total}, Active: {paid}",
|
"inline_admin_user_stats_desc": "Total: {total}, Active: {paid}",
|
||||||
@@ -300,7 +296,8 @@
|
|||||||
"log_payment_received": "{provider_emoji} <b>Payment Received</b>\n\n👤 User: {user_display}\n💰 Amount: <b>{amount} {currency}</b>\n📅 Period: <b>{months} mo.</b>\n🏦 Provider: {payment_provider}\n🕐 Time: {timestamp}",
|
"log_payment_received": "{provider_emoji} <b>Payment Received</b>\n\n👤 User: {user_display}\n💰 Amount: <b>{amount} {currency}</b>\n📅 Period: <b>{months} mo.</b>\n🏦 Provider: {payment_provider}\n🕐 Time: {timestamp}",
|
||||||
"log_promo_activation": "🎁 <b>Promo Code Activated</b>\n\n👤 User: {user_display}\n🏷 Code: <code>{promo_code}</code>\n🎯 Bonus: <b>+{bonus_days}d</b>\n🕐 Time: {timestamp}",
|
"log_promo_activation": "🎁 <b>Promo Code Activated</b>\n\n👤 User: {user_display}\n🏷 Code: <code>{promo_code}</code>\n🎯 Bonus: <b>+{bonus_days}d</b>\n🕐 Time: {timestamp}",
|
||||||
"log_trial_activation": "🆓 <b>Trial Activated</b>\n\n👤 User: {user_display}\n⏰ Valid until: <b>{end_date}</b>\n🕐 Time: {timestamp}",
|
"log_trial_activation": "🆓 <b>Trial Activated</b>\n\n👤 User: {user_display}\n⏰ Valid until: <b>{end_date}</b>\n🕐 Time: {timestamp}",
|
||||||
|
"log_suspicious_promo": "⚠️ <b>Suspicious Promo Code Attempt</b>\n\n👤 User: {user_display}\n🆔 ID: <code>{user_id}</code>\n📝 Input: <pre>{suspicious_input}</pre>\n🕐 Time: {timestamp}",
|
||||||
|
|
||||||
"admin_general_cancel_operation": "Operation cancelled ❌",
|
"admin_general_cancel_operation": "Operation cancelled ❌",
|
||||||
"admin_promo_codes_menu_bulk_create": "📦 Bulk Creation",
|
"admin_promo_codes_menu_bulk_create": "📦 Bulk Creation",
|
||||||
"admin_bulk_promo_create_prompt": "📦 Bulk Promo Code Creation\n\nEnter data in format:\n<code>quantity|days|description</code>\n\nExample:\n<code>10|7|Weekly promo</code>",
|
"admin_bulk_promo_create_prompt": "📦 Bulk Promo Code Creation\n\nEnter data in format:\n<code>quantity|days|description</code>\n\nExample:\n<code>10|7|Weekly promo</code>",
|
||||||
@@ -317,7 +314,6 @@
|
|||||||
"admin_promo_edit_enter_validity_days": "⏰ Enter the number of validity days for the promo code (1-365):",
|
"admin_promo_edit_enter_validity_days": "⏰ Enter the number of validity days for the promo code (1-365):",
|
||||||
"admin_promo_updated_success": "✅ Promo code updated!\n\n🎟 Code: <b>{code}</b>\n🎁 Bonus days: <b>{days}</b>\n🔢 Max activations: <b>{max_act}</b>\n⏰ Valid until: <b>{validity}</b>",
|
"admin_promo_updated_success": "✅ Promo code updated!\n\n🎟 Code: <b>{code}</b>\n🎁 Bonus days: <b>{days}</b>\n🔢 Max activations: <b>{max_act}</b>\n⏰ Valid until: <b>{validity}</b>",
|
||||||
"admin_promo_update_failed": "❌ Error updating promo code",
|
"admin_promo_update_failed": "❌ Error updating promo code",
|
||||||
"admin_promo_invalid_validity_days": "❌ Validity days must be from 1 to 365",
|
|
||||||
|
|
||||||
"admin_logs_export_csv": "📄 Export to CSV",
|
"admin_logs_export_csv": "📄 Export to CSV",
|
||||||
"admin_logs_csv_export_started": "📄 Starting log export to CSV...",
|
"admin_logs_csv_export_started": "📄 Starting log export to CSV...",
|
||||||
@@ -338,7 +334,6 @@
|
|||||||
"admin_banned_users_list": "📋 Banned Users ({count}):\n\n{users}",
|
"admin_banned_users_list": "📋 Banned Users ({count}):\n\n{users}",
|
||||||
|
|
||||||
"admin_panel_stats_header": "Panel Statistics",
|
"admin_panel_stats_header": "Panel Statistics",
|
||||||
"admin_bulk_promo_invalid_values": "❌ Invalid values: {error}",
|
|
||||||
|
|
||||||
"admin_bulk_promo_step1_quantity": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 1 of 4:</b> Quantity\n\nEnter the number of promo codes to create (1-1000):",
|
"admin_bulk_promo_step1_quantity": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 1 of 4:</b> Quantity\n\nEnter the number of promo codes to create (1-1000):",
|
||||||
"admin_bulk_promo_step2_bonus_days": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 2 of 4:</b> Bonus Days\n\nQuantity: <b>{quantity}</b>\n\nEnter the number of bonus days (1-365):",
|
"admin_bulk_promo_step2_bonus_days": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 2 of 4:</b> Bonus Days\n\nQuantity: <b>{quantity}</b>\n\nEnter the number of bonus days (1-365):",
|
||||||
@@ -348,7 +343,6 @@
|
|||||||
"admin_bulk_promo_invalid_quantity": "❌ Quantity must be between 1 and 1000",
|
"admin_bulk_promo_invalid_quantity": "❌ Quantity must be between 1 and 1000",
|
||||||
"admin_bulk_promo_invalid_bonus_days": "❌ Bonus days must be between 1 and 365",
|
"admin_bulk_promo_invalid_bonus_days": "❌ Bonus days must be between 1 and 365",
|
||||||
"admin_bulk_promo_invalid_max_activations": "❌ Max activations must be between 1 and 10000",
|
"admin_bulk_promo_invalid_max_activations": "❌ Max activations must be between 1 and 10000",
|
||||||
"admin_bulk_promo_invalid_validity_days": "❌ Validity days must be between 1 and 365",
|
|
||||||
|
|
||||||
"admin_bulk_promo_unlimited_validity": "♾️ Unlimited",
|
"admin_bulk_promo_unlimited_validity": "♾️ Unlimited",
|
||||||
"admin_bulk_promo_set_validity": "⏰ Set Period",
|
"admin_bulk_promo_set_validity": "⏰ Set Period",
|
||||||
@@ -361,7 +355,6 @@
|
|||||||
"admin_promo_step3_max_activations": "🎟 <b>Create Promo Code</b>\n\n<b>Step 3 of 4:</b> Max Activations\n\nCode: <b>{code}</b>\nBonus days: <b>{bonus_days}</b>\n\nEnter the maximum number of activations (1-10000):",
|
"admin_promo_step3_max_activations": "🎟 <b>Create Promo Code</b>\n\n<b>Step 3 of 4:</b> Max Activations\n\nCode: <b>{code}</b>\nBonus days: <b>{bonus_days}</b>\n\nEnter the maximum number of activations (1-10000):",
|
||||||
"admin_promo_step4_validity": "🎟 <b>Create Promo Code</b>\n\n<b>Step 4 of 4:</b> Validity Period\n\nCode: <b>{code}</b>\nBonus days: <b>{bonus_days}</b>\nMax activations: <b>{max_activations}</b>\n\nChoose the validity period for the promo code:",
|
"admin_promo_step4_validity": "🎟 <b>Create Promo Code</b>\n\n<b>Step 4 of 4:</b> Validity Period\n\nCode: <b>{code}</b>\nBonus days: <b>{bonus_days}</b>\nMax activations: <b>{max_activations}</b>\n\nChoose the validity period for the promo code:",
|
||||||
|
|
||||||
"admin_promo_invalid_code_format": "❌ Promo code must contain 3-30 characters (letters and numbers only)",
|
|
||||||
"admin_promo_code_already_exists": "❌ A promo code with this code already exists",
|
"admin_promo_code_already_exists": "❌ A promo code with this code already exists",
|
||||||
"admin_promo_processing_error": "❌ Error processing promo code",
|
"admin_promo_processing_error": "❌ Error processing promo code",
|
||||||
"admin_promo_unlimited_validity": "♾️ Unlimited",
|
"admin_promo_unlimited_validity": "♾️ Unlimited",
|
||||||
@@ -370,8 +363,6 @@
|
|||||||
"admin_promo_skip_description": "⏭️ Skip",
|
"admin_promo_skip_description": "⏭️ Skip",
|
||||||
"admin_promo_description_too_long": "❌ Description must not exceed 200 characters",
|
"admin_promo_description_too_long": "❌ Description must not exceed 200 characters",
|
||||||
"admin_promo_creating": "⏳ Creating promo code...",
|
"admin_promo_creating": "⏳ Creating promo code...",
|
||||||
"admin_promo_created_success": "✅ Promo code created!\n\n🎟 Code: <b>{code}</b>\n🎁 Bonus days: <b>{days}</b>\n🔢 Max activations: <b>{max_act}</b>\n⏰ Valid until: <b>{validity}</b>",
|
|
||||||
"admin_promo_creation_failed": "❌ Error creating promo code: {error}",
|
|
||||||
|
|
||||||
"admin_panel_back_button": "⬅️ Back",
|
"admin_panel_back_button": "⬅️ Back",
|
||||||
"admin_bulk_promo_creation_failed": "❌ Error creating promo codes: {error}",
|
"admin_bulk_promo_creation_failed": "❌ Error creating promo codes: {error}",
|
||||||
@@ -401,8 +392,6 @@
|
|||||||
"admin_user_subscription_expired": "Expired {end_date}",
|
"admin_user_subscription_expired": "Expired {end_date}",
|
||||||
"admin_user_subscription_none": "No active subscription",
|
"admin_user_subscription_none": "No active subscription",
|
||||||
|
|
||||||
"admin_user_logs_title": "📋 <b>User logs {user_id}</b>",
|
|
||||||
"admin_user_logs_empty": "No logs available",
|
|
||||||
"admin_user_logs_count": "Total entries: {count}",
|
"admin_user_logs_count": "Total entries: {count}",
|
||||||
"admin_user_logs_entry": "📅 {timestamp}\n📝 {event_type}: {content}",
|
"admin_user_logs_entry": "📅 {timestamp}\n📝 {event_type}: {content}",
|
||||||
|
|
||||||
@@ -412,9 +401,6 @@
|
|||||||
|
|
||||||
"admin_bulk_promo_unique_generation_failed": "Failed to create unique promo code",
|
"admin_bulk_promo_unique_generation_failed": "Failed to create unique promo code",
|
||||||
|
|
||||||
"admin_suspicious_promo_attempt_notification": "⚠️ <b>Suspicious promo code attempt</b>\n\n👤 User: <b>@{user_username}</b> (ID: {user_id})\n📝 Name: <b>{user_first_name}</b>\n💬 Input text: <b>{promo_code_input}</b>",
|
|
||||||
"admin_suspicious_promo_attempt_notification_no_username": "⚠️ <b>Suspicious promo code attempt</b>\n\n👤 User ID: <b>{user_id}</b>\n📝 Name: <b>{user_first_name}</b>\n💬 Input text: <b>{promo_code_input}</b>",
|
|
||||||
|
|
||||||
"admin_promo_management_button": "🎟 Promo Management",
|
"admin_promo_management_button": "🎟 Promo Management",
|
||||||
"admin_promo_management_title": "🎟 <b>Promo Code Management</b>\n\nSelect a promo code for detailed view:",
|
"admin_promo_management_title": "🎟 <b>Promo Code Management</b>\n\nSelect a promo code for detailed view:",
|
||||||
"admin_promo_management_empty": "📭 No promo codes available",
|
"admin_promo_management_empty": "📭 No promo codes available",
|
||||||
@@ -429,13 +415,10 @@
|
|||||||
"admin_promo_status_inactive": "🚫 Inactive",
|
"admin_promo_status_inactive": "🚫 Inactive",
|
||||||
"admin_promo_status_expired": "⏰ Expired",
|
"admin_promo_status_expired": "⏰ Expired",
|
||||||
"admin_promo_status_used_up": "🔄 Used up",
|
"admin_promo_status_used_up": "🔄 Used up",
|
||||||
"admin_promo_edit_button": "✏️ Edit",
|
|
||||||
"admin_promo_toggle_status_button": "🔄 On/Off",
|
"admin_promo_toggle_status_button": "🔄 On/Off",
|
||||||
"admin_promo_delete_button": "🗑 Delete",
|
|
||||||
"admin_promo_view_activations_button": "📋 Activations",
|
"admin_promo_view_activations_button": "📋 Activations",
|
||||||
"admin_promo_back_to_list_button": "⬅️ Back to list",
|
"admin_promo_back_to_list_button": "⬅️ Back to list",
|
||||||
|
|
||||||
"admin_panel_stats_header": "Panel Statistics",
|
|
||||||
"admin_panel_online_label": "Online",
|
"admin_panel_online_label": "Online",
|
||||||
"admin_panel_active_label": "Active",
|
"admin_panel_active_label": "Active",
|
||||||
"admin_panel_disabled_label": "Disabled",
|
"admin_panel_disabled_label": "Disabled",
|
||||||
@@ -466,8 +449,6 @@
|
|||||||
"inline_system_description": "🟢 Online: {online}, 📊 Active: {active}",
|
"inline_system_description": "🟢 Online: {online}, 📊 Active: {active}",
|
||||||
"inline_admin_help_title": "Commands help",
|
"inline_admin_help_title": "Commands help",
|
||||||
"inline_admin_help_description": "Available commands: ref, stat, financial, system",
|
"inline_admin_help_description": "Available commands: ref, stat, financial, system",
|
||||||
"inline_user_help_title": "Commands help",
|
|
||||||
"inline_user_help_description": "Available command: ref (referral link)",
|
|
||||||
|
|
||||||
"admin_user_stats_total_label": "Total",
|
"admin_user_stats_total_label": "Total",
|
||||||
"admin_user_stats_paid_subs_label": "With paid subscription",
|
"admin_user_stats_paid_subs_label": "With paid subscription",
|
||||||
|
|||||||
+1
-22
@@ -271,10 +271,6 @@
|
|||||||
"admin_user_logs_error": "❌ Ошибка загрузки действий пользователя",
|
"admin_user_logs_error": "❌ Ошибка загрузки действий пользователя",
|
||||||
"admin_direct_message_signature": "\n\n---\n💬 Сообщение от администратора",
|
"admin_direct_message_signature": "\n\n---\n💬 Сообщение от администратора",
|
||||||
|
|
||||||
|
|
||||||
"inline_referral_title": "🎁 Пригласить друга",
|
|
||||||
"inline_referral_description": "Поделиться реферальной ссылкой для получения бонусов",
|
|
||||||
|
|
||||||
"inline_user_stats_message": "📊 <b>Статистика Бота</b>\n👥 Пользователи\n\n📊 Всего: <b>{total}</b>\n💳 С платной подпиской: <b>{paid}</b>\n🆓 На пробном периоде: <b>{trial}</b>\n😴 Неактивных: <b>{inactive}</b>\n🚫 Заблокированных: <b>{banned}</b>\n🎁 Привлечено по реферальной программе: <b>{referral}</b>",
|
"inline_user_stats_message": "📊 <b>Статистика Бота</b>\n👥 Пользователи\n\n📊 Всего: <b>{total}</b>\n💳 С платной подпиской: <b>{paid}</b>\n🆓 На пробном периоде: <b>{trial}</b>\n😴 Неактивных: <b>{inactive}</b>\n🚫 Заблокированных: <b>{banned}</b>\n🎁 Привлечено по реферальной программе: <b>{referral}</b>",
|
||||||
"inline_user_stats_description": "Всего: {total}, Платных: {active}",
|
"inline_user_stats_description": "Всего: {total}, Платных: {active}",
|
||||||
"inline_admin_user_stats_title": "👥 Статистика пользователей",
|
"inline_admin_user_stats_title": "👥 Статистика пользователей",
|
||||||
@@ -289,8 +285,6 @@
|
|||||||
"inline_admin_system_stats_desc": "Онлайн: {online}, Офлайн: {offline}",
|
"inline_admin_system_stats_desc": "Онлайн: {online}, Офлайн: {offline}",
|
||||||
|
|
||||||
"inline_admin_help_message": "🤖 <b>Inline режим бота</b>\n\n📱 <b>Доступные команды:</b>\n\n🎁 <b>реф/ref</b> - поделиться реферальной ссылкой\n👥 <b>стат/stat</b> - статистика пользователей\n💰 <b>финансы</b> - финансовая статистика\n🖥 <b>система</b> - системная статистика\n\n💡 Просто напишите @{bot_username} и начните вводить команду в любом чате!",
|
"inline_admin_help_message": "🤖 <b>Inline режим бота</b>\n\n📱 <b>Доступные команды:</b>\n\n🎁 <b>реф/ref</b> - поделиться реферальной ссылкой\n👥 <b>стат/stat</b> - статистика пользователей\n💰 <b>финансы</b> - финансовая статистика\n🖥 <b>система</b> - системная статистика\n\n💡 Просто напишите @{bot_username} и начните вводить команду в любом чате!",
|
||||||
"inline_admin_help_title": "🤖 Inline помощь (Админ)",
|
|
||||||
"inline_admin_help_desc": "Доступны команды: реф, стат, финансы, система",
|
|
||||||
|
|
||||||
"inline_user_help_message": "🤖 <b>Inline режим бота</b>\n\n📱 <b>Доступные команды:</b>\n\n🎁 <b>реф/ref</b> - поделиться реферальной ссылкой\n\n💡 Просто напишите @{bot_username} и начните вводить 'реф' в любом чате!",
|
"inline_user_help_message": "🤖 <b>Inline режим бота</b>\n\n📱 <b>Доступные команды:</b>\n\n🎁 <b>реф/ref</b> - поделиться реферальной ссылкой\n\n💡 Просто напишите @{bot_username} и начните вводить 'реф' в любом чате!",
|
||||||
"inline_user_help_title": "🤖 Inline помощь",
|
"inline_user_help_title": "🤖 Inline помощь",
|
||||||
@@ -301,6 +295,7 @@
|
|||||||
"log_payment_received": "{provider_emoji} <b>Получен платеж</b>\n\n👤 Пользователь: {user_display}\n💰 Сумма: <b>{amount} {currency}</b>\n📅 Период: <b>{months} мес.</b>\n🏦 Провайдер: {payment_provider}\n🕐 Время: {timestamp}",
|
"log_payment_received": "{provider_emoji} <b>Получен платеж</b>\n\n👤 Пользователь: {user_display}\n💰 Сумма: <b>{amount} {currency}</b>\n📅 Период: <b>{months} мес.</b>\n🏦 Провайдер: {payment_provider}\n🕐 Время: {timestamp}",
|
||||||
"log_promo_activation": "🎁 <b>Активирован промокод</b>\n\n👤 Пользователь: {user_display}\n🏷 Код: <code>{promo_code}</code>\n🎯 Бонус: <b>+{bonus_days} дн.</b>\n🕐 Время: {timestamp}",
|
"log_promo_activation": "🎁 <b>Активирован промокод</b>\n\n👤 Пользователь: {user_display}\n🏷 Код: <code>{promo_code}</code>\n🎯 Бонус: <b>+{bonus_days} дн.</b>\n🕐 Время: {timestamp}",
|
||||||
"log_trial_activation": "🆓 <b>Активирован триал</b>\n\n👤 Пользователь: {user_display}\n⏰ Действует до: <b>{end_date}</b>\n🕐 Время: {timestamp}",
|
"log_trial_activation": "🆓 <b>Активирован триал</b>\n\n👤 Пользователь: {user_display}\n⏰ Действует до: <b>{end_date}</b>\n🕐 Время: {timestamp}",
|
||||||
|
"log_suspicious_promo": "⚠️ <b>Подозрительная попытка ввода промокода</b>\n\n👤 Пользователь: {user_display}\n🆔 ID: <code>{user_id}</code>\n📝 Ввод: <pre>{suspicious_input}</pre>\n🕐 Время: {timestamp}",
|
||||||
|
|
||||||
"admin_general_cancel_operation": "Операция отменена ❌",
|
"admin_general_cancel_operation": "Операция отменена ❌",
|
||||||
"admin_promo_codes_menu_bulk_create": "📦 Массовое создание",
|
"admin_promo_codes_menu_bulk_create": "📦 Массовое создание",
|
||||||
@@ -318,7 +313,6 @@
|
|||||||
"admin_promo_edit_enter_validity_days": "⏰ Введите количество дней действия промокода (1-365):",
|
"admin_promo_edit_enter_validity_days": "⏰ Введите количество дней действия промокода (1-365):",
|
||||||
"admin_promo_updated_success": "✅ Промокод обновлен!\n\n🎟 Код: <b>{code}</b>\n🎁 Бонусные дни: <b>{days}</b>\n🔢 Максимальные активации: <b>{max_act}</b>\n⏰ Действует до: <b>{validity}</b>",
|
"admin_promo_updated_success": "✅ Промокод обновлен!\n\n🎟 Код: <b>{code}</b>\n🎁 Бонусные дни: <b>{days}</b>\n🔢 Максимальные активации: <b>{max_act}</b>\n⏰ Действует до: <b>{validity}</b>",
|
||||||
"admin_promo_update_failed": "❌ Ошибка обновления промокода",
|
"admin_promo_update_failed": "❌ Ошибка обновления промокода",
|
||||||
"admin_promo_invalid_validity_days": "❌ Дни действия должны быть от 1 до 365",
|
|
||||||
|
|
||||||
"admin_logs_export_csv": "📄 Экспорт в CSV",
|
"admin_logs_export_csv": "📄 Экспорт в CSV",
|
||||||
"admin_logs_csv_export_started": "📄 Начинаю экспорт логов в CSV...",
|
"admin_logs_csv_export_started": "📄 Начинаю экспорт логов в CSV...",
|
||||||
@@ -339,7 +333,6 @@
|
|||||||
"admin_banned_users_list": "📋 Заблокированные пользователи ({count}):\n\n{users}",
|
"admin_banned_users_list": "📋 Заблокированные пользователи ({count}):\n\n{users}",
|
||||||
|
|
||||||
"admin_panel_stats_header": "Статистика панели",
|
"admin_panel_stats_header": "Статистика панели",
|
||||||
"admin_bulk_promo_invalid_values": "❌ Неверные значения: {error}",
|
|
||||||
|
|
||||||
"admin_bulk_promo_step1_quantity": "📦 <b>Массовое создание промокодов</b>\n\n<b>Шаг 1 из 4:</b> Количество промокодов\n\nВведите количество промокодов для создания (1-1000):",
|
"admin_bulk_promo_step1_quantity": "📦 <b>Массовое создание промокодов</b>\n\n<b>Шаг 1 из 4:</b> Количество промокодов\n\nВведите количество промокодов для создания (1-1000):",
|
||||||
"admin_bulk_promo_step2_bonus_days": "📦 <b>Массовое создание промокодов</b>\n\n<b>Шаг 2 из 4:</b> Бонусные дни\n\nКоличество: <b>{quantity}</b>\n\nВведите количество бонусных дней (1-365):",
|
"admin_bulk_promo_step2_bonus_days": "📦 <b>Массовое создание промокодов</b>\n\n<b>Шаг 2 из 4:</b> Бонусные дни\n\nКоличество: <b>{quantity}</b>\n\nВведите количество бонусных дней (1-365):",
|
||||||
@@ -349,7 +342,6 @@
|
|||||||
"admin_bulk_promo_invalid_quantity": "❌ Количество должно быть от 1 до 1000",
|
"admin_bulk_promo_invalid_quantity": "❌ Количество должно быть от 1 до 1000",
|
||||||
"admin_bulk_promo_invalid_bonus_days": "❌ Бонусные дни должны быть от 1 до 365",
|
"admin_bulk_promo_invalid_bonus_days": "❌ Бонусные дни должны быть от 1 до 365",
|
||||||
"admin_bulk_promo_invalid_max_activations": "❌ Максимальные активации должны быть от 1 до 10000",
|
"admin_bulk_promo_invalid_max_activations": "❌ Максимальные активации должны быть от 1 до 10000",
|
||||||
"admin_bulk_promo_invalid_validity_days": "❌ Дни действия должны быть от 1 до 365",
|
|
||||||
|
|
||||||
"admin_bulk_promo_unlimited_validity": "♾️ Неограниченно",
|
"admin_bulk_promo_unlimited_validity": "♾️ Неограниченно",
|
||||||
"admin_bulk_promo_set_validity": "⏰ Установить срок",
|
"admin_bulk_promo_set_validity": "⏰ Установить срок",
|
||||||
@@ -362,7 +354,6 @@
|
|||||||
"admin_promo_step3_max_activations": "🎟 <b>Создание промокода</b>\n\n<b>Шаг 3 из 4:</b> Максимальные активации\n\nКод: <b>{code}</b>\nБонусные дни: <b>{bonus_days}</b>\n\nВведите максимальное количество активаций (1-10000):",
|
"admin_promo_step3_max_activations": "🎟 <b>Создание промокода</b>\n\n<b>Шаг 3 из 4:</b> Максимальные активации\n\nКод: <b>{code}</b>\nБонусные дни: <b>{bonus_days}</b>\n\nВведите максимальное количество активаций (1-10000):",
|
||||||
"admin_promo_step4_validity": "🎟 <b>Создание промокода</b>\n\n<b>Шаг 4 из 4:</b> Срок действия\n\nКод: <b>{code}</b>\nБонусные дни: <b>{bonus_days}</b>\nМакс. активации: <b>{max_activations}</b>\n\nВыберите срок действия промокода:",
|
"admin_promo_step4_validity": "🎟 <b>Создание промокода</b>\n\n<b>Шаг 4 из 4:</b> Срок действия\n\nКод: <b>{code}</b>\nБонусные дни: <b>{bonus_days}</b>\nМакс. активации: <b>{max_activations}</b>\n\nВыберите срок действия промокода:",
|
||||||
|
|
||||||
"admin_promo_invalid_code_format": "❌ Код промокода должен содержать 3-30 символов (только буквы и цифры)",
|
|
||||||
"admin_promo_code_already_exists": "❌ Промокод с таким кодом уже существует",
|
"admin_promo_code_already_exists": "❌ Промокод с таким кодом уже существует",
|
||||||
"admin_promo_processing_error": "❌ Ошибка обработки промокода",
|
"admin_promo_processing_error": "❌ Ошибка обработки промокода",
|
||||||
"admin_promo_unlimited_validity": "♾️ Неограниченно",
|
"admin_promo_unlimited_validity": "♾️ Неограниченно",
|
||||||
@@ -371,8 +362,6 @@
|
|||||||
"admin_promo_skip_description": "⏭️ Пропустить",
|
"admin_promo_skip_description": "⏭️ Пропустить",
|
||||||
"admin_promo_description_too_long": "❌ Описание не должно превышать 200 символов",
|
"admin_promo_description_too_long": "❌ Описание не должно превышать 200 символов",
|
||||||
"admin_promo_creating": "⏳ Создаю промокод...",
|
"admin_promo_creating": "⏳ Создаю промокод...",
|
||||||
"admin_promo_created_success": "✅ Промокод создан!\n\n🎟 Код: <b>{code}</b>\n🎁 Бонусные дни: <b>{days}</b>\n🔢 Максимальные активации: <b>{max_act}</b>\n⏰ Действует до: <b>{validity}</b>",
|
|
||||||
"admin_promo_creation_failed": "❌ Ошибка создания промокода: {error}",
|
|
||||||
|
|
||||||
"admin_panel_back_button": "⬅️ Назад",
|
"admin_panel_back_button": "⬅️ Назад",
|
||||||
"admin_bulk_promo_creation_failed": "❌ Ошибка создания промокодов: {error}",
|
"admin_bulk_promo_creation_failed": "❌ Ошибка создания промокодов: {error}",
|
||||||
@@ -402,8 +391,6 @@
|
|||||||
"admin_user_subscription_expired": "Истекла {end_date}",
|
"admin_user_subscription_expired": "Истекла {end_date}",
|
||||||
"admin_user_subscription_none": "Нет активной подписки",
|
"admin_user_subscription_none": "Нет активной подписки",
|
||||||
|
|
||||||
"admin_user_logs_title": "📋 <b>Логи пользователя {user_id}</b>",
|
|
||||||
"admin_user_logs_empty": "Логи отсутствуют",
|
|
||||||
"admin_user_logs_count": "Всего записей: {count}",
|
"admin_user_logs_count": "Всего записей: {count}",
|
||||||
"admin_user_logs_entry": "📅 {timestamp}\n📝 {event_type}: {content}",
|
"admin_user_logs_entry": "📅 {timestamp}\n📝 {event_type}: {content}",
|
||||||
|
|
||||||
@@ -413,9 +400,6 @@
|
|||||||
|
|
||||||
"admin_bulk_promo_unique_generation_failed": "Не удалось создать уникальный промокод",
|
"admin_bulk_promo_unique_generation_failed": "Не удалось создать уникальный промокод",
|
||||||
|
|
||||||
"admin_suspicious_promo_attempt_notification": "⚠️ <b>Подозрительная попытка ввода промокода</b>\n\n👤 Пользователь: <b>@{user_username}</b> (ID: {user_id})\n📝 Имя: <b>{user_first_name}</b>\n💬 Введенный текст: <b>{promo_code_input}</b>",
|
|
||||||
"admin_suspicious_promo_attempt_notification_no_username": "⚠️ <b>Подозрительная попытка ввода промокода</b>\n\n👤 Пользователь ID: <b>{user_id}</b>\n📝 Имя: <b>{user_first_name}</b>\n💬 Введенный текст: <b>{promo_code_input}</b>",
|
|
||||||
|
|
||||||
"admin_promo_management_button": "🎟 Управление промокодами",
|
"admin_promo_management_button": "🎟 Управление промокодами",
|
||||||
"admin_promo_management_title": "🎟 <b>Управление промокодами</b>\n\nВыберите промокод для детального просмотра:",
|
"admin_promo_management_title": "🎟 <b>Управление промокодами</b>\n\nВыберите промокод для детального просмотра:",
|
||||||
"admin_promo_management_empty": "📭 Промокоды отсутствуют",
|
"admin_promo_management_empty": "📭 Промокоды отсутствуют",
|
||||||
@@ -430,13 +414,10 @@
|
|||||||
"admin_promo_status_inactive": "🚫 Неактивен",
|
"admin_promo_status_inactive": "🚫 Неактивен",
|
||||||
"admin_promo_status_expired": "⏰ Истек",
|
"admin_promo_status_expired": "⏰ Истек",
|
||||||
"admin_promo_status_used_up": "🔄 Исчерпан",
|
"admin_promo_status_used_up": "🔄 Исчерпан",
|
||||||
"admin_promo_edit_button": "✏️ Редактировать",
|
|
||||||
"admin_promo_toggle_status_button": "🔄 Вкл/Выкл",
|
"admin_promo_toggle_status_button": "🔄 Вкл/Выкл",
|
||||||
"admin_promo_delete_button": "🗑 Удалить",
|
|
||||||
"admin_promo_view_activations_button": "📋 Активации",
|
"admin_promo_view_activations_button": "📋 Активации",
|
||||||
"admin_promo_back_to_list_button": "⬅️ К списку",
|
"admin_promo_back_to_list_button": "⬅️ К списку",
|
||||||
|
|
||||||
"admin_panel_stats_header": "Статистика панели",
|
|
||||||
"admin_panel_online_label": "Онлайн",
|
"admin_panel_online_label": "Онлайн",
|
||||||
"admin_panel_active_label": "Активных",
|
"admin_panel_active_label": "Активных",
|
||||||
"admin_panel_disabled_label": "Отключенных",
|
"admin_panel_disabled_label": "Отключенных",
|
||||||
@@ -467,8 +448,6 @@
|
|||||||
"inline_system_description": "🟢 Онлайн: {online}, 📊 Активных: {active}",
|
"inline_system_description": "🟢 Онлайн: {online}, 📊 Активных: {active}",
|
||||||
"inline_admin_help_title": "Помощь по командам",
|
"inline_admin_help_title": "Помощь по командам",
|
||||||
"inline_admin_help_description": "Доступны команды: реф, стат, финансы, система",
|
"inline_admin_help_description": "Доступны команды: реф, стат, финансы, система",
|
||||||
"inline_user_help_title": "Помощь по командам",
|
|
||||||
"inline_user_help_description": "Доступна команда: реф (реферальная ссылка)",
|
|
||||||
|
|
||||||
"admin_user_stats_total_label": "Всего",
|
"admin_user_stats_total_label": "Всего",
|
||||||
"admin_user_stats_paid_subs_label": "С платной подпиской",
|
"admin_user_stats_paid_subs_label": "С платной подпиской",
|
||||||
|
|||||||
Reference in New Issue
Block a user