fix: add safe_edit_message to prevent BadRequest errors
Добавлена helper-функция safe_edit_message, которая игнорирует ошибку 'Message is not modified' при повторном редактировании сообщений с тем же содержимым. Все обработчики удаления сценариев используют эту функцию.
This commit is contained in:
@@ -202,6 +202,16 @@ async def remove_previous_keyboard(
|
|||||||
pass
|
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(
|
async def send_message_and_save(
|
||||||
update: Update,
|
update: Update,
|
||||||
context: ContextTypes.DEFAULT_TYPE,
|
context: ContextTypes.DEFAULT_TYPE,
|
||||||
@@ -625,19 +635,16 @@ async def handle_delete_scenario_list(
|
|||||||
scenarios = get_all_scenarios()
|
scenarios = get_all_scenarios()
|
||||||
|
|
||||||
if not scenarios:
|
if not scenarios:
|
||||||
await query.edit_message_text(
|
await safe_edit_message(
|
||||||
|
query,
|
||||||
"📭 Нет сценариев для удаления.\n\n" + format_admin_stats(),
|
"📭 Нет сценариев для удаления.\n\n" + format_admin_stats(),
|
||||||
reply_markup=get_admin_keyboard(),
|
get_admin_keyboard(),
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
await safe_edit_message(
|
||||||
await query.edit_message_text(
|
query, "🗑 Выберите сценарий для удаления:", get_admin_delete_list_keyboard()
|
||||||
"🗑 Выберите сценарий для удаления:",
|
)
|
||||||
reply_markup=get_admin_delete_list_keyboard(),
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass # Сообщение уже такое же
|
|
||||||
session.last_bot_message_id = query.message.message_id
|
session.last_bot_message_id = query.message.message_id
|
||||||
upsert_user_session(session)
|
upsert_user_session(session)
|
||||||
|
|
||||||
@@ -667,9 +674,7 @@ async def handle_select_scenario_delete(
|
|||||||
Пользователи, озвучивающие этот сценарий, будут перенаправлены."""
|
Пользователи, озвучивающие этот сценарий, будут перенаправлены."""
|
||||||
|
|
||||||
session.state = UserState.ADMIN_DELETE_CONFIRM
|
session.state = UserState.ADMIN_DELETE_CONFIRM
|
||||||
await query.edit_message_text(
|
await safe_edit_message(query, text, get_admin_delete_confirm_keyboard())
|
||||||
text, reply_markup=get_admin_delete_confirm_keyboard()
|
|
||||||
)
|
|
||||||
session.last_bot_message_id = query.message.message_id
|
session.last_bot_message_id = query.message.message_id
|
||||||
upsert_user_session(session)
|
upsert_user_session(session)
|
||||||
|
|
||||||
@@ -685,7 +690,7 @@ async def handle_confirm_delete(
|
|||||||
scenario_id = context.user_data.get("pending_delete_scenario")
|
scenario_id = context.user_data.get("pending_delete_scenario")
|
||||||
|
|
||||||
if not scenario_id:
|
if not scenario_id:
|
||||||
await query.edit_message_text("❌ Данные потеряны. Попробуйте снова.")
|
await safe_edit_message(query, "❌ Данные потеряны. Попробуйте снова.")
|
||||||
session.state = UserState.ADMIN
|
session.state = UserState.ADMIN
|
||||||
upsert_user_session(session)
|
upsert_user_session(session)
|
||||||
return
|
return
|
||||||
@@ -734,10 +739,11 @@ async def handle_confirm_delete(
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
session.state = UserState.ADMIN
|
session.state = UserState.ADMIN
|
||||||
await query.edit_message_text(
|
await safe_edit_message(
|
||||||
|
query,
|
||||||
f"✅ Сценарий {scenario_id} удалён! (файлов: {deleted_files})\n\n"
|
f"✅ Сценарий {scenario_id} удалён! (файлов: {deleted_files})\n\n"
|
||||||
+ format_admin_stats(),
|
+ format_admin_stats(),
|
||||||
reply_markup=get_admin_keyboard(),
|
get_admin_keyboard(),
|
||||||
)
|
)
|
||||||
session.last_bot_message_id = query.message.message_id
|
session.last_bot_message_id = query.message.message_id
|
||||||
upsert_user_session(session)
|
upsert_user_session(session)
|
||||||
@@ -754,9 +760,7 @@ async def handle_cancel_delete(
|
|||||||
query = update.callback_query
|
query = update.callback_query
|
||||||
context.user_data.pop("pending_delete_scenario", None)
|
context.user_data.pop("pending_delete_scenario", None)
|
||||||
session.state = UserState.ADMIN
|
session.state = UserState.ADMIN
|
||||||
await query.edit_message_text(
|
await safe_edit_message(query, format_admin_stats(), get_admin_keyboard())
|
||||||
format_admin_stats(), reply_markup=get_admin_keyboard()
|
|
||||||
)
|
|
||||||
session.last_bot_message_id = query.message.message_id
|
session.last_bot_message_id = query.message.message_id
|
||||||
upsert_user_session(session)
|
upsert_user_session(session)
|
||||||
|
|
||||||
@@ -769,9 +773,7 @@ async def handle_cancel_delete_list(
|
|||||||
) -> None:
|
) -> None:
|
||||||
"""Отмена выбора сценария для удаления."""
|
"""Отмена выбора сценария для удаления."""
|
||||||
query = update.callback_query
|
query = update.callback_query
|
||||||
await query.edit_message_text(
|
await safe_edit_message(query, format_admin_stats(), get_admin_keyboard())
|
||||||
format_admin_stats(), reply_markup=get_admin_keyboard()
|
|
||||||
)
|
|
||||||
session.last_bot_message_id = query.message.message_id
|
session.last_bot_message_id = query.message.message_id
|
||||||
upsert_user_session(session)
|
upsert_user_session(session)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user