editMessageMedia - Bad Request: can't parse InputMedia: expected an Object
Samurai016 opened this issue · 2 comments
Samurai016 commented
hi, I've updated my telepot library as you said.
Then I implemented the function editMessageMedia in this way:
##...other code (this is inside a for loop, the url parameter is an image url, like "https://...")
if i==0:
message = bot.sendPhoto(chat_id=chat_id,photo=url, caption=content_ph)
else:
edited = telepot.message_identifier(message)
ms = telepot.namedtuple.InputMediaPhoto(media=url)
bot.editMessageMedia(edited, ms)
But at the bot.editMessageMedia row, i have this error:
..other lines (GameStart is my method)
File "telegram.py", line 67, in GameStart
bot.editMessageMedia(edited, ms)
File "C:\Users\NEW\Desktop\bitfaces\bitfacesenv\lib\site-packages\telepot\__init__.py", line 921, in editMessageMedia
return self._api_request('editMessageMedia', _rectify(p), files_to_attach)
File "C:\Users\NEW\Desktop\bitfaces\bitfacesenv\lib\site-packages\telepot\__init__.py", line 496, in _api_request
return api.request((self._token, method, params, files), **kwargs)
File "C:\Users\NEW\Desktop\bitfaces\bitfacesenv\lib\site-packages\telepot\api.py", line 155, in request
return _parse(r)
File "C:\Users\NEW\Desktop\bitfaces\bitfacesenv\lib\site-packages\telepot\api.py", line 150, in _parse
raise exception.TelegramError(description, error_code, data)
telepot.exception.TelegramError: ("Bad Request: can't parse InputMedia: expected an Object", 400, {'ok': False, 'error_code': 400, 'description': "Bad Request: can't parse InputMedia: expected an Object"})
And finally this is the editMessageMedia implementation:
def editMessageMedia(self, msg_identifier, media,
reply_markup=None):
"""
See: https://core.telegram.org/bots/api#editmessagemedia
:param msg_identifier: Same as ``msg_identifier`` in :meth:`telepot.Bot.editMessageText`
:param media:
Same as ``media`` in :meth:`telepot.Bot.sendMediaGroup`, except that here is a single
`InputMedia <https://core.telegram.org/bots/api#inputmedia>`_ object, not an array.
"""
p,f = _split(locals(), discard=['msg_identifier', 'media'])
p.update(_dismantle_message_identifier(msg_identifier))
legal_media, files_to_attach = _split_input_media_array([media])
p['media'] = legal_media
return self._api_request('editMessageMedia', _rectify(p), files_to_attach)
Could somebody help me? Thanks
codingever commented
Hi @Samurai016,
I aslo get stucked with this issue. After some investigation I have found a solution:
extract a dict object 'media' from legal_media and put it into p:
p['media'] = legal_media[0]
nickoala commented
Thanks @codingever. sendMediaGroup()
expects an array of media, while editMessageMedia()
expects a single media. Your solution is right on.