nickoala/telepot

editMessageMedia - Bad Request: can't parse InputMedia: expected an Object

Samurai016 opened this issue · 2 comments

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

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]

Thanks @codingever. sendMediaGroup() expects an array of media, while editMessageMedia() expects a single media. Your solution is right on.