fix negative balance in gifts/ amoun in yoomoney

This commit is contained in:
Vladless
2026-03-17 01:37:57 +03:00
parent 31f008e9e5
commit 11d11b2fee
6 changed files with 26 additions and 6 deletions
+11 -3
View File
@@ -457,6 +457,7 @@ async def create_key(
selected_device_limit: int | None = None,
selected_traffic_gb: int | None = None,
selected_price_rub: int | None = None,
skip_balance_charge: bool | None = None,
):
from_user = message_or_query.from_user if isinstance(message_or_query, CallbackQuery | Message) else None
if from_user:
@@ -472,9 +473,12 @@ async def create_key(
use_country_selection = bool(MODES_CONFIG.get("COUNTRY_SELECTION_ENABLED", USE_COUNTRY_SELECTION))
if state and any(
value is not None
for value in (selected_duration_days, selected_device_limit, selected_traffic_gb, selected_price_rub)
if state and (
skip_balance_charge is not None
or any(
value is not None
for value in (selected_duration_days, selected_device_limit, selected_traffic_gb, selected_price_rub)
)
):
state_data = await state.get_data()
if selected_duration_days is not None:
@@ -485,6 +489,8 @@ async def create_key(
state_data["config_selected_traffic_gb"] = selected_traffic_gb
if selected_price_rub is not None:
state_data["config_selected_price_rub"] = selected_price_rub
if skip_balance_charge is not None:
state_data["skip_balance_charge"] = skip_balance_charge
await state.set_data(state_data)
if use_country_selection:
@@ -499,6 +505,7 @@ async def create_key(
selected_device_limit=selected_device_limit,
selected_traffic_gb=selected_traffic_gb,
selected_price_rub=selected_price_rub,
skip_balance_charge=skip_balance_charge,
)
else:
await key_cluster_mode(
@@ -511,4 +518,5 @@ async def create_key(
selected_device_limit=selected_device_limit,
selected_traffic_gb=selected_traffic_gb,
selected_price_rub=selected_price_rub,
skip_balance_charge=skip_balance_charge,
)
+3 -1
View File
@@ -69,6 +69,7 @@ async def key_cluster_mode(
selected_device_limit: int | None = None,
selected_traffic_gb: int | None = None,
selected_price_rub: int | None = None,
skip_balance_charge: bool | None = None,
):
target_message = None
safe_to_edit = False
@@ -93,6 +94,7 @@ async def key_cluster_mode(
try:
data = await state.get_data() if state else {}
is_trial = data.get("is_trial", False)
skip_balance_charge = bool(skip_balance_charge)
if selected_device_limit is None:
selected_device_limit = data.get("config_selected_device_limit") or data.get("selected_device_limit")
@@ -182,7 +184,7 @@ async def key_cluster_mode(
if trial_status in [0, -1]:
await update_trial(session, tg_id, 1)
if price_to_charge:
if price_to_charge and not skip_balance_charge:
await update_balance(session, tg_id, -int(price_to_charge))
except Exception as e:
+12 -2
View File
@@ -89,6 +89,7 @@ async def key_country_mode(
selected_device_limit: int | None = None,
selected_traffic_gb: int | None = None,
selected_price_rub: int | None = None,
skip_balance_charge: bool | None = None,
):
target_message = None
safe_to_edit = False
@@ -96,7 +97,10 @@ async def key_country_mode(
if state and plan:
await state.update_data(tariff_id=plan)
if state and any(value is not None for value in (selected_device_limit, selected_traffic_gb, selected_price_rub)):
if state and (
skip_balance_charge is not None
or any(value is not None for value in (selected_device_limit, selected_traffic_gb, selected_price_rub))
):
data = await state.get_data()
if selected_device_limit is not None:
data["config_selected_device_limit"] = selected_device_limit
@@ -104,6 +108,8 @@ async def key_country_mode(
data["config_selected_traffic_gb"] = selected_traffic_gb
if selected_price_rub is not None:
data["config_selected_price_rub"] = selected_price_rub
if skip_balance_charge is not None:
data["skip_balance_charge"] = skip_balance_charge
await state.set_data(data)
if isinstance(message_or_query, CallbackQuery) and message_or_query.message:
@@ -502,6 +508,7 @@ async def finalize_key_creation(
data = await state.get_data() if state else {}
is_trial = data.get("is_trial", False)
skip_balance_charge = bool(data.get("skip_balance_charge", False))
selected_traffic_gb = data.get("config_selected_traffic_gb")
if selected_traffic_gb is None:
@@ -726,9 +733,12 @@ async def finalize_key_creation(
trial_status = await get_trial(session, tg_id)
if trial_status in [0, -1]:
await update_trial(session, tg_id, 1)
if not is_trial and price_to_charge:
if not is_trial and price_to_charge and not skip_balance_charge:
await update_balance(session, tg_id, -int(price_to_charge))
if state:
await state.update_data(skip_balance_charge=False)
await session.commit()
except Exception as e: