diff --git a/bot/handlers/buy.py b/bot/handlers/buy.py
index 73f69f4..dcc5d09 100644
--- a/bot/handlers/buy.py
+++ b/bot/handlers/buy.py
@@ -176,7 +176,7 @@ async def proceed_to_checkout(
if effective_balance < amount:
await cb.message.edit_text(
- INSUFFICIENT_FUNDS.format(balance=user.balance, amount=amount), reply_markup=deposit_kb
+ INSUFFICIENT_FUNDS.format(balance=user.balance, amount=amount, diff=abs(amount-user.balance)), reply_markup=deposit_kb
)
return
diff --git a/bot/handlers/menus.py b/bot/handlers/menus.py
index ebfb15d..be64f00 100644
--- a/bot/handlers/menus.py
+++ b/bot/handlers/menus.py
@@ -149,7 +149,7 @@ async def sub_info(
deps.user_service.format_subscription_message(
rw_user, link=user.subscription_link, autorenew=sub.autorenew
),
- reply_markup=subscription_controls(sub.autorenew),
+ reply_markup=subscription_controls(show_autorenew=bool(rw_user), current_autorenewal_status=sub.autorenew),
)
@@ -183,5 +183,5 @@ async def toggle_autorenewal(
deps.user_service.format_subscription_message(
rw_user, link=user.subscription_link, autorenew=sub.autorenew
),
- reply_markup=subscription_controls(sub.autorenew),
+ reply_markup=subscription_controls(show_autorenew=bool(rw_user), current_autorenewal_status=sub.autorenew),
)
diff --git a/bot/keyboards/client.py b/bot/keyboards/client.py
index 5b7d722..08ba02e 100644
--- a/bot/keyboards/client.py
+++ b/bot/keyboards/client.py
@@ -54,18 +54,19 @@ deposit_kb: InlineKeyboardMarkup = InlineKeyboardBuilder(
).as_markup()
-def subscription_controls(current_autorenewal_status: bool) -> InlineKeyboardMarkup:
- autorenewal_text = (
- "🟢 Включить автопродление"
- if not current_autorenewal_status
- else "🔴 Отключить автопродление"
- )
- return InlineKeyboardBuilder(
- [
- [InlineKeyboardButton(text=autorenewal_text, callback_data="toggle:autorenewal")],
- [_return_to_menu_btn],
- ]
- ).as_markup()
+def subscription_controls(show_autorenew: bool, current_autorenewal_status: bool = None) -> InlineKeyboardMarkup:
+ builder = InlineKeyboardBuilder()
+
+ if show_autorenew:
+ autorenewal_text = (
+ "🟢 Включить автопродление"
+ if not current_autorenewal_status
+ else "🔴 Отключить автопродление"
+ )
+ builder.row(InlineKeyboardButton(text=autorenewal_text, callback_data="toggle:autorenewal"))
+
+ builder.row(_return_to_menu_btn)
+ return builder.as_markup()
def _return_btn(data: str = "menu:main", text: str = "⬅️ Назад") -> InlineKeyboardButton:
diff --git a/bot/texts.py b/bot/texts.py
index 7ef7e0d..08d4136 100644
--- a/bot/texts.py
+++ b/bot/texts.py
@@ -185,7 +185,7 @@ BILL_CREATION = _BILL_TEMPLATE + _DIVIDER + GENERAL_PROCESSING
BILL_CREATED = _BILL_TEMPLATE + _DIVIDER + _BILL_LINK
-INSUFFICIENT_FUNDS = "⚠️ Недостаточно средств для проведения операции.\n\n💰 Текущий баланс: {balance}₽\n💸 Требуется: {amount}₽"
+INSUFFICIENT_FUNDS = "⚠️ Недостаточно средств для проведения операции.\n\n💰 Текущий баланс: {balance}₽\n💸 Требуется: {amount}₽\n\n❗ Пополните баланс на {diff}₽"
SUCCESSFULLY_CREATED_SUBSCRIPTION = (
"💚 Ваша подписка успешно оплачена! Ссылка на добавления доступна в главном меню."
)
@@ -205,58 +205,3 @@ SUPPORT_INIT = "🎧 Тех. Поддержка Malenia — не здес
SUPPORT_MSG_SENT = "⏳ Приняли ваше сообщение. Мы постараемся ответить на него в ближайшее время.\nВернуться в меню: /cancel"
SUPPORT_SIGNATURE = "📡 Ответ от Malenia:"
-
-
-# ============================================================
-# ШАБЛОНЫ — ЗАЯВКИ И ТИКЕТЫ
-# ============================================================
-
-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
- + NO_SUBSCRIPTION
-)
-
-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}₽"
diff --git a/services/user_service.py b/services/user_service.py
index 3e09eba..0e8fefb 100644
--- a/services/user_service.py
+++ b/services/user_service.py
@@ -80,11 +80,7 @@ class UserService:
user = await self.user_repository.get_user_by_id(session, user_id)
- if not rw_user:
- return user
-
- link = utils.get_subscription_link(rw_user.short_uuid)
-
+ link = utils.get_subscription_link(rw_user.short_uuid) if rw_user else None
user = await self.user_repository.update_user_link(session, user_id, link)
return user