如何使用 Telegram 的 python 机器人 API 编辑发送的消息?

Jam*_*eed 5 python telegram-bot

文档(https://core.telegram.org/bots/api#editmessagetext)说我需要指定要编辑的消息 ID,但我不知道如何获取该消息 ID。

我尝试将 ID 设置为变量:

import telepot
from telepot.namedTuple import InlineKeyboardMarkup, InlineKeyboardButton

messageEditID = bot.sendMessage(<location ID>, "Test", reply_markup=InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text="Testing", callback_data="test"]]))['message_id']
Run Code Online (Sandbox Code Playgroud)

因为此类消息的 POST 数据将是

{"message_id":1140126,"chat":{"title":"<location name>","type":"supergroup","id":<location ID>},"date":1477960655,"from":{"username":"<bot username>","first_name":"<bot name>","id":<bot ID>},"text":"Test"}
Run Code Online (Sandbox Code Playgroud)

然后根据内联回复数据回调

if msg['data'] == 'test':
    bot.editMessage(messageEditID, "Did it work?")
Run Code Online (Sandbox Code Playgroud)

但它会抛出异常并显示以下消息:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/telepot/__init__.py", line 738, in collector
    callback(item)
  File "testingStuff.py", line 150, in handle
    bot.editMessageText(messageEditID, "Does it work?")
  File "/usr/local/lib/python3.5/dist-packages/telepot/__init__.py", line 592, in editMessageText
    return self._api_request('editMessageText', _rectify(p))
  File "/usr/local/lib/python3.5/dist-packages/telepot/__init__.py", line 398, in _api_request
    return api.request((self._token, method, params, files), **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/telepot/api.py", line 131, in request
    return _parse(r)
  File "/usr/local/lib/python3.5/dist-packages/telepot/api.py", line 126, in _parse
    raise exception.TelegramError(description, error_code, data)
telepot.exception.TelegramError: ('Bad Request: Wrong inline message identifier specified', 400, {'description': 'Bad Request: Wrong inline message identifier specified', 'ok': False, 'error_code': 400})
Run Code Online (Sandbox Code Playgroud)

当我尝试根据响应编辑消息时,它引发了相同的错误,

if msg['data'] == 'test':
    msgID = msg['message']['message_id']
    bot.editMessageText(msgID, "OBOY")
Run Code Online (Sandbox Code Playgroud)

因为传入内联回复的数据是:

{'chat_instance': '112564336693044113',
 'data': 'test',
 'from': {'first_name': 'B(', 'id': <user ID>, 'username': '<username>'},
 'id': '852908411206280027',
 'message': {'chat': {'id': <chat ID>,
                      'title': 'We da bes',
                      'type': 'supergroup',
                      'username': '<chat username>'},
             'date': 1477961765,
             'from': {'first_name': 'Testing For James',
                      'id': <bot ID>,
                      'username': '<bot username>'},
             'message_id': 63180,
             'text': 'Test'}}
Run Code Online (Sandbox Code Playgroud)

谁能帮我找出我哪里出了问题?

Jam*_*eed 1

Telepot 有一个 message_identifier 方法,您可以通过将 sendMessage 方法设置为变量然后调用 message_identifier 消息来调用该方法

sent = bot.sendMessage(9999999, "Testing")
edited = telepot.message_identifier(sent)
bot.editMessageText(edited, "Tested")
Run Code Online (Sandbox Code Playgroud)