Refactor payment method ID extraction for improved reliability

- Updated the logic for extracting payment method IDs from callback data to handle cases with multiple segments, ensuring more robust parsing.
- Enhanced the consistency of ID retrieval across different payment method handlers, improving overall code reliability and user experience.
This commit is contained in:
machka-pasla
2025-09-04 18:00:04 +03:00
parent 850f135bf8
commit cf7f0eae51
+6 -3
View File
@@ -654,7 +654,8 @@ async def payment_method_delete_confirm(callback: types.CallbackQuery, settings:
current_lang = i18n_data.get("current_language", settings.DEFAULT_LANGUAGE)
i18n: Optional[JsonI18n] = i18n_data.get("i18n_instance")
_ = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs) if i18n else key
pm_id = callback.data.split(":", 1)[-1] if ":" in callback.data else ""
parts = callback.data.split(":", 2)
pm_id = parts[2] if len(parts) >= 3 else ""
await callback.message.edit_text(_("payment_method_delete_confirm"), reply_markup=get_payment_method_delete_confirm_keyboard(pm_id, current_lang, i18n))
try:
await callback.answer()
@@ -668,7 +669,8 @@ async def payment_method_delete(callback: types.CallbackQuery, settings: Setting
i18n: Optional[JsonI18n] = i18n_data.get("i18n_instance")
_ = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs) if i18n else key
# Try to parse specific method id for multi-card deletion
pm_id_raw = callback.data.split(":", 1)[-1] if ":" in callback.data else ""
parts = callback.data.split(":", 2)
pm_id_raw = parts[2] if len(parts) >= 3 else ""
deleted = False
# Attempt multi-card deletion first
try:
@@ -737,7 +739,8 @@ async def payment_method_view(callback: types.CallbackQuery, settings: Settings,
if not methods:
await callback.answer(_("payment_method_none"), show_alert=True)
return
pm_id = callback.data.split(":", 1)[-1] if ":" in callback.data else str(methods[0].method_id)
parts = callback.data.split(":", 2)
pm_id = parts[2] if len(parts) >= 3 else str(methods[0].method_id)
# Map:
sel = next((m for m in methods if str(m.method_id) == pm_id or m.provider_payment_method_id == pm_id), methods[0])
title = _("payment_method_card_title", network=sel.card_network or "Card", last4=sel.card_last4 or "????")