Merge pull request #245 from JustYay/dev

FIX "Сообщение о минимальном балансе"
This commit is contained in:
Vladislav Lisitsyn
2025-10-14 01:06:12 +03:00
committed by GitHub
4 changed files with 120 additions and 60 deletions
+8 -1
View File
@@ -47,7 +47,7 @@ async def handle_custom_amount_input_heleket(
return
if amount < 10:
await edit_or_send_message(target_message=message, text="❌ Минимальная сумма для оплаты криптовалютой — 10 рублей.")
await edit_or_send_message(target_message=message, text="❌ Минимальная сумма для оплаты криптовалютой — 10₽ (≈0.1$).")
return
enabled_methods = [m for m in HELEKET_PAYMENT_METHODS if m["enable"]]
@@ -58,6 +58,13 @@ async def handle_custom_amount_input_heleket(
try:
payment_url = await generate_heleket_payment_link(amount, tg_id, method)
if not payment_url or payment_url == "https://heleket.com/":
await edit_or_send_message(
target_message=message,
text="❌ Произошла ошибка при создании платежа. Попробуйте позже или выберите другой способ оплаты.",
)
return
markup = InlineKeyboardMarkup(
inline_keyboard=[
+37 -53
View File
@@ -11,6 +11,7 @@ from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder
from sqlalchemy.ext.asyncio import AsyncSession
from handlers.payments.currency_rates import format_for_user
from config import (
HELEKET_API_KEY,
@@ -21,7 +22,7 @@ from config import (
PROVIDERS_ENABLED,
)
from handlers.payments.providers import get_providers
from ..currency_rates import get_rub_rate
from handlers.payments.currency_rates import get_rub_rate
from handlers.buttons import BACK, HELEKET, PAY_2
from handlers.texts import ENTER_SUM, HELEKET_CRYPTO_DESCRIPTION, HELEKET_PAYMENT_MESSAGE
from handlers.payments.keyboards import build_amounts_keyboard, payment_options_for_user, parse_amount_from_callback, pay_keyboard
@@ -229,7 +230,7 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
if user_amount < min_amount:
await edit_or_send_message(
target_message=message,
text=f"Минимальная сумма для оплаты криптовалютой — {currency_symbol}{min_amount}.",
text=f"Минимальная сумма для оплаты криптовалютой — {currency_symbol}{min_amount}.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
@@ -237,7 +238,7 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
except Exception:
await edit_or_send_message(
target_message=message,
text="Некорректная сумма. Введите целое число больше 0.",
text="Некорректная сумма. Введите целое число больше 0.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
@@ -253,6 +254,15 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
await state.update_data(amount=amount_rub)
payment_url = await generate_heleket_payment_link(amount_rub, message.chat.id, method)
if not payment_url or payment_url == "https://heleket.com/":
await edit_or_send_message(
target_message=message,
text="❌ Произошла ошибка при создании платежа. Попробуйте позже или выберите другой способ оплаты.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
confirm_keyboard = pay_keyboard(payment_url, pay_text=PAY_2, back_cb="balance")
from ..currency_rates import format_for_user
@@ -269,56 +279,8 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
await state.set_state(ReplenishBalanceHeleket.waiting_for_payment_confirmation)
async def process_fast_flow_heleket(
callback_query: types.CallbackQuery,
state: FSMContext,
session: AsyncSession,
amount: int,
method_name: str = "crypto",
):
method = next((m for m in HELEKET_PAYMENT_METHODS if m["name"] == method_name and m["enable"]), None)
if not method:
await edit_or_send_message(
target_message=callback_query.message,
text="Ошибка: выбранный способ оплаты недоступен.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
if amount <= 0:
await edit_or_send_message(
target_message=callback_query.message,
text="Некорректная сумма.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
if amount < 10:
await edit_or_send_message(
target_message=callback_query.message,
text="Минимальная сумма для оплаты криптовалютой — 10 рублей.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
await state.update_data(heleket_method=method_name, amount=amount)
payment_url = await generate_heleket_payment_link(amount, callback_query.message.chat.id, method)
confirm_keyboard = pay_keyboard(payment_url, pay_text=PAY_2, back_cb="balance")
await edit_or_send_message(
target_message=callback_query.message,
text=HELEKET_PAYMENT_MESSAGE.format(amount=amount),
reply_markup=confirm_keyboard,
force_text=True,
)
await state.set_state(ReplenishBalanceHeleket.waiting_for_payment_confirmation)
@router.callback_query(F.data.startswith("heleket_crypto_amount|"))
async def process_amount_selection(callback_query: types.CallbackQuery, state: FSMContext):
async def process_amount_selection(callback_query: types.CallbackQuery, state: FSMContext, session: AsyncSession):
amount = parse_amount_from_callback(callback_query.data, prefixes=["heleket_crypto"])
if amount is None:
await edit_or_send_message(
@@ -341,14 +303,36 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F
)
return
if amount < 10:
await edit_or_send_message(
target_message=callback_query.message,
text="❌ Минимальная сумма для оплаты криптовалютой — 10₽ (≈0.1$).",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
await state.update_data(amount=amount)
payment_url = await generate_heleket_payment_link(amount, callback_query.message.chat.id, method)
if not payment_url or payment_url == "https://heleket.com/":
await edit_or_send_message(
target_message=callback_query.message,
text="❌ Произошла ошибка при создании платежа. Попробуйте позже или выберите другой способ оплаты.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
confirm_keyboard = pay_keyboard(payment_url, pay_text=PAY_2, back_cb="balance")
tg_id = callback_query.from_user.id
language_code = await get_user_language(session, tg_id)
amount_text = await format_for_user(session, tg_id, float(amount), language_code)
await edit_or_send_message(
target_message=callback_query.message,
text=HELEKET_PAYMENT_MESSAGE.format(amount=amount),
text=HELEKET_PAYMENT_MESSAGE.format(amount=amount_text),
reply_markup=confirm_keyboard,
force_text=True,
)
+19 -1
View File
@@ -51,6 +51,10 @@ async def handle_custom_amount_input_kassai_cards(
await edit_or_send_message(target_message=message, text="❌ Не удалось определить сумму оплаты.")
return
if amount < 50:
await edit_or_send_message(target_message=message, text="❌ Минимальная сумма для оплаты картой — 50₽.")
return
method = next((m for m in KASSAI_PAYMENT_METHODS if m["name"] == "cards" and m["enable"]), None)
if not method:
await edit_or_send_message(target_message=message, text="❌ Оплата картами KassaAI временно недоступна.")
@@ -58,6 +62,13 @@ async def handle_custom_amount_input_kassai_cards(
try:
payment_url = await generate_kassai_payment_link(amount, tg_id, method)
if not payment_url or payment_url == "https://fk.life/":
await edit_or_send_message(
target_message=message,
text="❌ Произошла ошибка при создании платежа. Попробуйте позже или выберите другой способ оплаты.",
)
return
markup = InlineKeyboardMarkup(
inline_keyboard=[
@@ -108,7 +119,7 @@ async def handle_custom_amount_input_kassai_sbp(
return
if amount < 10:
await edit_or_send_message(target_message=message, text="❌ Минимальная сумма для оплаты через СБП — 10 рублей.")
await edit_or_send_message(target_message=message, text="❌ Минимальная сумма для оплаты через СБП — 10.")
return
method = next((m for m in KASSAI_PAYMENT_METHODS if m["name"] == "sbp" and m["enable"]), None)
@@ -118,6 +129,13 @@ async def handle_custom_amount_input_kassai_sbp(
try:
payment_url = await generate_kassai_payment_link(amount, tg_id, method)
if not payment_url or payment_url == "https://fk.life/":
await edit_or_send_message(
target_message=message,
text="❌ Произошла ошибка при создании платежа. Попробуйте позже или выберите другой способ оплаты.",
)
return
markup = InlineKeyboardMarkup(
inline_keyboard=[
+56 -5
View File
@@ -9,6 +9,7 @@ from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder
from sqlalchemy.ext.asyncio import AsyncSession
from handlers.payments.currency_rates import format_for_user
from config import (
KASSAI_API_KEY,
@@ -224,13 +225,24 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
if user_amount <= 0:
raise ValueError
if method_name == "sbp":
if method_name == "cards":
min_amount = 1 if currency == "USD" else 50
currency_symbol = "$" if currency == "USD" else ""
if user_amount < min_amount:
await edit_or_send_message(
target_message=message,
text=f"❌ Минимальная сумма для оплаты картой — {currency_symbol}{min_amount}.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
elif method_name == "sbp":
min_amount = 1 if currency == "USD" else 10
currency_symbol = "$" if currency == "USD" else ""
if user_amount < min_amount:
await edit_or_send_message(
target_message=message,
text=f"Минимальная сумма для оплаты через СБП — {currency_symbol}{min_amount}.",
text=f"Минимальная сумма для оплаты через СБП — {currency_symbol}{min_amount}.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
@@ -238,7 +250,7 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
except Exception:
await edit_or_send_message(
target_message=message,
text="Некорректная сумма. Введите целое число больше 0.",
text="Некорректная сумма. Введите целое число больше 0.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
@@ -254,6 +266,15 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
await state.update_data(amount=amount_rub)
payment_url = await generate_kassai_payment_link(amount_rub, message.chat.id, method)
if not payment_url or payment_url == "https://fk.life/":
await edit_or_send_message(
target_message=message,
text="❌ Произошла ошибка при создании платежа. Попробуйте позже или выберите другой способ оплаты.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
confirm_keyboard = pay_keyboard(payment_url, pay_text=PAY_2, back_cb="balance")
tg_id = message.from_user.id
@@ -270,7 +291,7 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext,
@router.callback_query(F.data.startswith("kassai_cards_amount|") | F.data.startswith("kassai_sbp_amount|"))
async def process_amount_selection(callback_query: types.CallbackQuery, state: FSMContext):
async def process_amount_selection(callback_query: types.CallbackQuery, state: FSMContext, session: AsyncSession):
amount = parse_amount_from_callback(callback_query.data, prefixes=["kassai_cards", "kassai_sbp"])
if amount is None:
await edit_or_send_message(
@@ -293,14 +314,44 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F
)
return
if method_name == "cards" and amount < 50:
await edit_or_send_message(
target_message=callback_query.message,
text="❌ Минимальная сумма для оплаты картой — 50₽.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
elif method_name == "sbp" and amount < 10:
await edit_or_send_message(
target_message=callback_query.message,
text="❌ Минимальная сумма для оплаты через СБП — 10₽.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
await state.update_data(amount=amount)
payment_url = await generate_kassai_payment_link(amount, callback_query.message.chat.id, method)
if not payment_url or payment_url == "https://fk.life/":
await edit_or_send_message(
target_message=callback_query.message,
text="❌ Произошла ошибка при создании платежа. Попробуйте позже или выберите другой способ оплаты.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[]),
force_text=True,
)
return
confirm_keyboard = pay_keyboard(payment_url, pay_text=PAY_2, back_cb="balance")
tg_id = callback_query.from_user.id
language_code = await get_user_language(session, tg_id)
amount_text = await format_for_user(session, tg_id, float(amount), language_code)
await edit_or_send_message(
target_message=callback_query.message,
text=KASSAI_PAYMENT_MESSAGE.format(amount=amount),
text=KASSAI_PAYMENT_MESSAGE.format(amount=amount_text),
reply_markup=confirm_keyboard,
force_text=True,
)