I'm making test bot using aiogram now and i faced a problem. I want to edit message media, but i only have a link to an image, and when i try to use an 'edit_media' method aiogram tells me that it can't parse JSON object. (error) In documentation said that 'media' parameter must be 'A JSON-serialized object for a new media content of the message'. Here is my code: code
@dp.callback_query_handler(kb.item_nav_cb.filter(action='next'))
async def item_next_cb_handler(query: types.CallbackQuery, callback_data: dict):
await bot.answer_callback_query(query.id)
logging.info(callback_data)
current_index = int(callback_data['index'])
current_index += 1
link = df_new['link'].iloc[current_index]
item_info = get_item_info.get_item_info(domen+link)
if link in favourites[f'user_{query.from_user.id}']:
item_kb = kb.get_item_fav_kb(index=current_index,
link=link)
else:
item_kb = kb.get_item_notfav_kb(index=current_index,
link=link)
await query.message.edit_caption(caption=f'<b>{item_info[0]}</b>\n{item_info[1]}\n\nЦена: {item_info[2]}',
reply_markup=item_kb)
await query.message.edit_media(media=item_info[3]) # Here is the problem
Found a solution. Needed to use InputMediaPhoto type:
photo = types.input_media.InputMediaPhoto(item_info[3])
await query.message.edit_media(media=photo)
And all together code looks like this:
@dp.callback_query_handler(kb.item_nav_cb.filter(action='next'))
async def item_next_cb_handler(query: types.CallbackQuery, callback_data: dict):
await bot.answer_callback_query(query.id)
logging.info(callback_data)
current_index = int(callback_data['index'])
current_index += 1
link = df_new['link'].iloc[current_index]
item_info = get_item_info.get_item_info(domen+link)
if link in favourites[f'user_{query.from_user.id}']:
item_kb = kb.get_item_fav_kb(index=current_index,
link=link)
else:
item_kb = kb.get_item_notfav_kb(index=current_index,
link=link)
photo = types.input_media.InputMediaPhoto(item_info[3]) # Makes a difference
await query.message.edit_media(media=photo)
await query.message.edit_caption(caption=f'<b>{item_info[0]}</b>\n{item_info[1]}\n\nЦена: {item_info[2]}',
reply_markup=item_kb)