From 6ea52bf4067e467b54bcba67faeea5551a13a865 Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 24 Dec 2025 22:46:04 +0300 Subject: [PATCH] Update messages.py --- app/handlers/admin/messages.py | 88 ++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 19 deletions(-) diff --git a/app/handlers/admin/messages.py b/app/handlers/admin/messages.py index 5579417a..d4b34980 100644 --- a/app/handlers/admin/messages.py +++ b/app/handlers/admin/messages.py @@ -711,29 +711,56 @@ async def handle_media_selection( await state.update_data(has_media=False) await show_button_selector_callback(callback, db_user, state) return - + media_type = callback.data.replace('add_media_', '') - + media_instructions = { "photo": "📷 Отправьте фотографию для рассылки:", "video": "🎥 Отправьте видео для рассылки:", "document": "📄 Отправьте документ для рассылки:" } - + await state.update_data( media_type=media_type, waiting_for_media=True ) - - await callback.message.edit_text( + + instruction_text = ( f"{media_instructions.get(media_type, 'Отправьте медиафайл:')}\n\n" - f"Размер файла не должен превышать 50 МБ", - reply_markup=types.InlineKeyboardMarkup(inline_keyboard=[ - [types.InlineKeyboardButton(text="❌ Отмена", callback_data="admin_messages")] - ]), - parse_mode="HTML" + f"Размер файла не должен превышать 50 МБ" ) - + instruction_keyboard = types.InlineKeyboardMarkup(inline_keyboard=[ + [types.InlineKeyboardButton(text="❌ Отмена", callback_data="admin_messages")] + ]) + + # Проверяем, является ли текущее сообщение медиа-сообщением + is_media_message = ( + callback.message.photo + or callback.message.video + or callback.message.document + or callback.message.animation + or callback.message.audio + or callback.message.voice + ) + + if is_media_message: + # Удаляем медиа-сообщение и отправляем новое текстовое + try: + await callback.message.delete() + except Exception: + pass + await callback.message.answer( + instruction_text, + reply_markup=instruction_keyboard, + parse_mode="HTML" + ) + else: + await callback.message.edit_text( + instruction_text, + reply_markup=instruction_keyboard, + parse_mode="HTML" + ) + await state.set_state(AdminStates.waiting_for_broadcast_media) await callback.answer() @@ -860,12 +887,12 @@ async def show_button_selector_callback( if selected_buttons is None: selected_buttons = list(DEFAULT_SELECTED_BUTTONS) await state.update_data(selected_buttons=selected_buttons) - + media_info = "" if has_media: media_type = data.get('media_type', 'файл') media_info = f"\n🖼️ Медиафайл: {media_type} добавлен" - + text = f""" 📘 Выбор дополнительных кнопок @@ -882,16 +909,39 @@ async def show_button_selector_callback( Выберите нужные кнопки и нажмите "Продолжить": """ - + keyboard = get_updated_message_buttons_selector_keyboard_with_media( selected_buttons, has_media, db_user.language ) - - await callback.message.edit_text( - text, - reply_markup=keyboard, - parse_mode="HTML" + + # Проверяем, является ли текущее сообщение медиа-сообщением + # (фото, видео, документ и т.д.) - для них нельзя использовать edit_text + is_media_message = ( + callback.message.photo + or callback.message.video + or callback.message.document + or callback.message.animation + or callback.message.audio + or callback.message.voice ) + + if is_media_message: + # Удаляем медиа-сообщение и отправляем новое текстовое + try: + await callback.message.delete() + except Exception: + pass # Игнорируем ошибки удаления + await callback.message.answer( + text, + reply_markup=keyboard, + parse_mode="HTML" + ) + else: + await callback.message.edit_text( + text, + reply_markup=keyboard, + parse_mode="HTML" + ) await callback.answer()