Замена сообщения с текстом на сообщение с текстом и картинкой

Код хендлеров:

def get_user_data(user_id):
    with sq.connect('events_db.db') as con:
        cursor = con.cursor()
        cursor.execute(f"SELECT * FROM Users WHERE tg_id={str(user_id)}")
        result = cursor.fetchone()
    return result

@router.callback_query(F.data == "main_menu")
async def main_menu(message: Message):
    await message.answer(f"Главное меню", reply_markup=kb.main_menu)

@router.callback_query(F.data == "profile_but")
async def profile(callback: CallbackQuery):
    data = get_user_data(callback.from_user.id)
    await callback.message.answer_photo(photo=data[6], caption=f"- Имя: {data[3]}\n- Номер: {data[4]}\n- Описание:\n{data[5]}",
                                        reply_markup=kb.profile_change)

Код клавиатур:

main_menu = InlineKeyboardMarkup(inline_keyboard=[
    [InlineKeyboardButton(text="Профиль ?‍♂️", callback_data="profile_but")],
    
    [InlineKeyboardButton(text="Мероприятия ?", callback_data="events_but"),
     InlineKeyboardButton(text="Таблица лидеров ?", callback_data="leaderboard_but")]
],
                           resize_keyboard=True,
                           input_field_placeholder="Выберите пункт меню")

profile_change = InlineKeyboardMarkup(inline_keyboard=[
    [InlineKeyboardButton(text="Изменить ФИО", callback_data="full_name_change_but"),
    InlineKeyboardButton(text="Изменить номер телефона", callback_data="phone_number_change_but")],

    [InlineKeyboardButton(text="Изменить описание", callback_data="description_change_but"),
    InlineKeyboardButton(text="Изменить фото", callback_data="photo_change_but")],

    [InlineKeyboardButton(text="Назад", callback_data="description_change_but")]
],
                           resize_keyboard=True,
                           input_field_placeholder="Выберите пункт меню")

В events_db.db следующие столбцы:

  1. tg_id: int

  2. id_role: int

  3. score: int

  4. full_name: str

  5. phone_number: str

  6. description: str

  7. photo: str*

*Т. к. хранится в формате, в который Телеграм конвертирует фото, по типу:

"AgACAgIAAxkBAAIB12cSaNzi7DsJwIx2Tl77g8-j0E4oAAJe5zEbPIKRSOIxnr-E5ffYAQADAgADeAADNgQ"


В методе main_menu при нажатии на кнопку Профиль я хочу, чтобы в методе profile сообщение только с текстом изменялось на сообщение с текстом и картинкой.

Chatgpt выдал этот код:

@router.callback_query(F.data == "profile_but")
async def profile(callback: CallbackQuery):
    data = get_user_data(callback.from_user.id)
    await callback.message.edit_message_media(
        media=InputMediaPhoto(
            media=data[6],  # Фото пользователя
            caption=f"Имя: {data[3]}\n- Номер: {data[4]}\n- Описание:\n{data[5]}"  # Описание
        ),
        reply_markup=kb.profile_change
    )

Но выходит ошибка, что нет медиа для изменения:

aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: there is no media in the message to edit

Как можно решить эту проблему?


Ответы (0 шт):