Enhance error handling in subscription response methods

- Implemented try-except blocks around callback answer methods to prevent exceptions from disrupting user interactions.
- Ensured consistent use of the `answer` method across various subscription-related handlers, improving reliability in user notifications.
This commit is contained in:
machka-pasla
2025-08-29 12:27:13 +03:00
parent fb2672732d
commit acf5f060a6
+100 -29
View File
@@ -35,7 +35,10 @@ async def display_subscription_options(event: Union[types.Message,
if not i18n: if not i18n:
err_msg = "Language service error." err_msg = "Language service error."
if isinstance(event, types.CallbackQuery): if isinstance(event, types.CallbackQuery):
await event.answer(err_msg, show_alert=True) try:
await event.answer(err_msg, show_alert=True)
except Exception:
pass
elif isinstance(event, types.Message): elif isinstance(event, types.Message):
await event.answer(err_msg) await event.answer(err_msg)
return return
@@ -54,8 +57,11 @@ async def display_subscription_options(event: Union[types.Message,
event, types.CallbackQuery) else event event, types.CallbackQuery) else event
if not target_message_obj: if not target_message_obj:
if isinstance(event, types.CallbackQuery): if isinstance(event, types.CallbackQuery):
await event.answer(get_text("error_occurred_try_again"), try:
show_alert=True) await event.answer(get_text("error_occurred_try_again"),
show_alert=True)
except Exception:
pass
return return
if isinstance(event, types.CallbackQuery): if isinstance(event, types.CallbackQuery):
@@ -65,7 +71,10 @@ async def display_subscription_options(event: Union[types.Message,
except Exception: except Exception:
await target_message_obj.answer(text_content, await target_message_obj.answer(text_content,
reply_markup=reply_markup) reply_markup=reply_markup)
await event.answer() try:
await event.answer()
except Exception:
pass
else: else:
await target_message_obj.answer(text_content, await target_message_obj.answer(text_content,
reply_markup=reply_markup) reply_markup=reply_markup)
@@ -81,8 +90,11 @@ async def select_subscription_period_callback_handler(
) if i18n else key ) if i18n else key
if not i18n or not callback.message: if not i18n or not callback.message:
await callback.answer(get_text("error_occurred_try_again"), try:
show_alert=True) await callback.answer(get_text("error_occurred_try_again"),
show_alert=True)
except Exception:
pass
return return
try: try:
@@ -90,7 +102,10 @@ async def select_subscription_period_callback_handler(
except (ValueError, IndexError): except (ValueError, IndexError):
logging.error( logging.error(
f"Invalid subscription period in callback_data: {callback.data}") f"Invalid subscription period in callback_data: {callback.data}")
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
price_rub = settings.subscription_options.get(months) price_rub = settings.subscription_options.get(months)
@@ -98,7 +113,10 @@ async def select_subscription_period_callback_handler(
logging.error( logging.error(
f"Price not found for {months} months subscription period in settings.subscription_options." f"Price not found for {months} months subscription period in settings.subscription_options."
) )
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
currency_symbol_val = settings.DEFAULT_CURRENCY_SYMBOL currency_symbol_val = settings.DEFAULT_CURRENCY_SYMBOL
@@ -125,7 +143,10 @@ async def select_subscription_period_callback_handler(
) )
await callback.message.answer(text_content, await callback.message.answer(text_content,
reply_markup=reply_markup) reply_markup=reply_markup)
await callback.answer() try:
await callback.answer()
except Exception:
pass
@router.callback_query(F.data.startswith("pay_stars:")) @router.callback_query(F.data.startswith("pay_stars:"))
@@ -138,7 +159,10 @@ async def pay_stars_callback_handler(
get_text = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs) if i18n else key get_text = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs) if i18n else key
if not i18n or not callback.message: if not i18n or not callback.message:
await callback.answer(get_text("error_occurred_try_again"), show_alert=True) try:
await callback.answer(get_text("error_occurred_try_again"), show_alert=True)
except Exception:
pass
return return
try: try:
@@ -148,7 +172,10 @@ async def pay_stars_callback_handler(
stars_price = int(price_str) stars_price = int(price_str)
except (ValueError, IndexError): except (ValueError, IndexError):
logging.error(f"Invalid pay_stars data in callback: {callback.data}") logging.error(f"Invalid pay_stars data in callback: {callback.data}")
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
user_id = callback.from_user.id user_id = callback.from_user.id
@@ -158,10 +185,16 @@ async def pay_stars_callback_handler(
session, user_id, months, stars_price, payment_description) session, user_id, months, stars_price, payment_description)
if payment_id is None: if payment_id is None:
await callback.message.edit_text(get_text("error_payment_gateway")) await callback.message.edit_text(get_text("error_payment_gateway"))
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
await callback.answer() try:
await callback.answer()
except Exception:
pass
@router.callback_query(F.data.startswith("pay_yk:")) @router.callback_query(F.data.startswith("pay_yk:"))
@@ -175,9 +208,11 @@ async def pay_yk_callback_handler(
) if i18n else key ) if i18n else key
if not i18n or not callback.message: if not i18n or not callback.message:
try:
await callback.answer(get_text("error_occurred_try_again"), await callback.answer(get_text("error_occurred_try_again"),
show_alert=True) show_alert=True)
except Exception:
pass
return return
if not yookassa_service or not yookassa_service.configured: if not yookassa_service or not yookassa_service.configured:
@@ -185,8 +220,11 @@ async def pay_yk_callback_handler(
target_msg_edit = callback.message target_msg_edit = callback.message
await target_msg_edit.edit_text(get_text("payment_service_unavailable") await target_msg_edit.edit_text(get_text("payment_service_unavailable")
) )
await callback.answer(get_text("payment_service_unavailable_alert"), try:
show_alert=True) await callback.answer(get_text("payment_service_unavailable_alert"),
show_alert=True)
except Exception:
pass
return return
try: try:
@@ -197,7 +235,10 @@ async def pay_yk_callback_handler(
except (ValueError, IndexError): except (ValueError, IndexError):
logging.error( logging.error(
f"Invalid pay_yk data in callback: {callback.data}") f"Invalid pay_yk data in callback: {callback.data}")
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
user_id = callback.from_user.id user_id = callback.from_user.id
@@ -229,13 +270,19 @@ async def pay_yk_callback_handler(
exc_info=True) exc_info=True)
await callback.message.edit_text( await callback.message.edit_text(
get_text("error_creating_payment_record")) get_text("error_creating_payment_record"))
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
if not db_payment_record: if not db_payment_record:
await callback.message.edit_text( await callback.message.edit_text(
get_text("error_creating_payment_record")) get_text("error_creating_payment_record"))
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
yookassa_metadata = { yookassa_metadata = {
@@ -267,7 +314,10 @@ async def pay_yk_callback_handler(
exc_info=True) exc_info=True)
await callback.message.edit_text( await callback.message.edit_text(
get_text("error_payment_gateway_link_failed")) get_text("error_payment_gateway_link_failed"))
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
await callback.message.edit_text( await callback.message.edit_text(
@@ -291,7 +341,10 @@ async def pay_yk_callback_handler(
) )
await callback.message.edit_text(get_text("error_payment_gateway")) await callback.message.edit_text(get_text("error_payment_gateway"))
await callback.answer() try:
await callback.answer()
except Exception:
pass
@router.callback_query(F.data.startswith("pay_crypto:")) @router.callback_query(F.data.startswith("pay_crypto:"))
@@ -303,12 +356,18 @@ async def pay_crypto_callback_handler(
get_text = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs) if i18n else key get_text = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs) if i18n else key
if not i18n or not callback.message: if not i18n or not callback.message:
await callback.answer(get_text("error_occurred_try_again"), show_alert=True) try:
await callback.answer(get_text("error_occurred_try_again"), show_alert=True)
except Exception:
pass
return return
if not cryptopay_service or not cryptopay_service.configured: if not cryptopay_service or not cryptopay_service.configured:
await callback.message.edit_text(get_text("payment_service_unavailable")) await callback.message.edit_text(get_text("payment_service_unavailable"))
await callback.answer(get_text("payment_service_unavailable_alert"), show_alert=True) try:
await callback.answer(get_text("payment_service_unavailable_alert"), show_alert=True)
except Exception:
pass
return return
try: try:
@@ -318,7 +377,10 @@ async def pay_crypto_callback_handler(
amount_val = float(amount_str) amount_val = float(amount_str)
except (ValueError, IndexError): except (ValueError, IndexError):
logging.error(f"Invalid pay_crypto data in callback: {callback.data}") logging.error(f"Invalid pay_crypto data in callback: {callback.data}")
await callback.answer(get_text("error_try_again"), show_alert=True) try:
await callback.answer(get_text("error_try_again"), show_alert=True)
except Exception:
pass
return return
user_id = callback.from_user.id user_id = callback.from_user.id
@@ -334,7 +396,10 @@ async def pay_crypto_callback_handler(
) )
else: else:
await callback.message.edit_text(get_text("error_payment_gateway")) await callback.message.edit_text(get_text("error_payment_gateway"))
await callback.answer() try:
await callback.answer()
except Exception:
pass
@router.callback_query(F.data == "main_action:subscribe") @router.callback_query(F.data == "main_action:subscribe")
@@ -387,7 +452,10 @@ async def my_subscription_command_handler(
) )
if isinstance(event, types.CallbackQuery): if isinstance(event, types.CallbackQuery):
await event.answer() try:
await event.answer()
except Exception:
pass
try: try:
await event.message.edit_text(text, reply_markup=kb) await event.message.edit_text(text, reply_markup=kb)
except: except:
@@ -421,7 +489,10 @@ async def my_subscription_command_handler(
markup = get_back_to_main_menu_markup(current_lang, i18n) markup = get_back_to_main_menu_markup(current_lang, i18n)
if isinstance(event, types.CallbackQuery): if isinstance(event, types.CallbackQuery):
await event.answer() try:
await event.answer()
except Exception:
pass
try: try:
await event.message.edit_text(text, reply_markup=markup, parse_mode="HTML", disable_web_page_preview=True) await event.message.edit_text(text, reply_markup=markup, parse_mode="HTML", disable_web_page_preview=True)
except: except: