Telegram 机器人中并发回复的有效处理

Valid processing of concurrent replies in Telegram bot

我的电报机器人中有一个问答游戏,我在并发回复中遇到问题:

bot: question_1
player_1: answer_1_to_question_1
bot: answer correct, question_2
player_2: delayed answer to question_1  <--- problem
bot: invalid answer to question_2       <--- problem

所以问题是 player_2 发送了对第一个问题的回复,由于延迟,它在机器人期望第二个问题的答案时到达。

如果是非实际问题,我只想接受第一个答案而忽略第二个答案。电报消息中有一个reply_to_message结构:

{'reply_to_message': {'from': {'username': u'Bot', 'first_name': u'', 'id': 1}, 'text': u'some text', 'chat': {'type': u'group', 'id': -2, 'title': u''}, 'date': 1487442200, 'message_id': 10351144}

我试图为每次聊天保存最后发送的消息,如果它与最后一条消息不匹配则忽略回复。但问题是在我发送之前,message_id 用于传出消息不可用。外发消息文本与回复文本不匹配(例如,它们去除标记等)。

是否有可靠的方法来了解这条传入消息是对最新传出消息的回复?

可以在您发送消息后立即读取 message_id(例如,更新的消息从 python-telegram-bot 的 sendMessage 方法返回)。所以可以只保存它并与 reply_to_message.message_id.

进行比较