Замена сообщения с текстом на сообщение с текстом и картинкой
Код хендлеров:
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
следующие столбцы:
tg_id
:int
id_role
:int
score
:int
full_name
:str
phone_number
:str
description
:str
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
Как можно решить эту проблему?