diff --git a/src/handlers.py b/src/handlers.py index e5367ab..5de0883 100644 --- a/src/handlers.py +++ b/src/handlers.py @@ -202,6 +202,16 @@ async def remove_previous_keyboard( pass +async def safe_edit_message( + query, text: str, reply_markup: InlineKeyboardMarkup | None = None +) -> None: + """Безопасно редактирует сообщение, игнорируя ошибку 'Message is not modified'.""" + try: + await query.edit_message_text(text, reply_markup=reply_markup) + except Exception: + pass # Сообщение уже такое же или другая ошибка + + async def send_message_and_save( update: Update, context: ContextTypes.DEFAULT_TYPE, @@ -625,19 +635,16 @@ async def handle_delete_scenario_list( scenarios = get_all_scenarios() if not scenarios: - await query.edit_message_text( + await safe_edit_message( + query, "📭 Нет сценариев для удаления.\n\n" + format_admin_stats(), - reply_markup=get_admin_keyboard(), + get_admin_keyboard(), ) return - try: - await query.edit_message_text( - "🗑 Выберите сценарий для удаления:", - reply_markup=get_admin_delete_list_keyboard(), - ) - except Exception: - pass # Сообщение уже такое же + await safe_edit_message( + query, "🗑 Выберите сценарий для удаления:", get_admin_delete_list_keyboard() + ) session.last_bot_message_id = query.message.message_id upsert_user_session(session) @@ -667,9 +674,7 @@ async def handle_select_scenario_delete( Пользователи, озвучивающие этот сценарий, будут перенаправлены.""" session.state = UserState.ADMIN_DELETE_CONFIRM - await query.edit_message_text( - text, reply_markup=get_admin_delete_confirm_keyboard() - ) + await safe_edit_message(query, text, get_admin_delete_confirm_keyboard()) session.last_bot_message_id = query.message.message_id upsert_user_session(session) @@ -685,7 +690,7 @@ async def handle_confirm_delete( scenario_id = context.user_data.get("pending_delete_scenario") if not scenario_id: - await query.edit_message_text("❌ Данные потеряны. Попробуйте снова.") + await safe_edit_message(query, "❌ Данные потеряны. Попробуйте снова.") session.state = UserState.ADMIN upsert_user_session(session) return @@ -734,10 +739,11 @@ async def handle_confirm_delete( pass session.state = UserState.ADMIN - await query.edit_message_text( + await safe_edit_message( + query, f"✅ Сценарий {scenario_id} удалён! (файлов: {deleted_files})\n\n" + format_admin_stats(), - reply_markup=get_admin_keyboard(), + get_admin_keyboard(), ) session.last_bot_message_id = query.message.message_id upsert_user_session(session) @@ -754,9 +760,7 @@ async def handle_cancel_delete( query = update.callback_query context.user_data.pop("pending_delete_scenario", None) session.state = UserState.ADMIN - await query.edit_message_text( - format_admin_stats(), reply_markup=get_admin_keyboard() - ) + await safe_edit_message(query, format_admin_stats(), get_admin_keyboard()) session.last_bot_message_id = query.message.message_id upsert_user_session(session) @@ -769,9 +773,7 @@ async def handle_cancel_delete_list( ) -> None: """Отмена выбора сценария для удаления.""" query = update.callback_query - await query.edit_message_text( - format_admin_stats(), reply_markup=get_admin_keyboard() - ) + await safe_edit_message(query, format_admin_stats(), get_admin_keyboard()) session.last_bot_message_id = query.message.message_id upsert_user_session(session)