没有聊天数据的 Telegram Bot Poll 负载

Telegram Bot Poll payload without chat data

当接收到纯消息 (MessageHandler) 或回调查询 (CallbackQueryHandler) 时,更新负载包括聊天对象(id、类型等)

{'update_id': 696992165, 
    'message': {'message_id': 1267, 'date': 1589968391, 
       'chat': {'id': 931365322, 'type': 'private', 

如果是投票 (PollHandler),则不是这种情况(只有与投票问题相关的问题、答案和信息)

{'update_id': 696992167, 
  'poll': {'id': '5920521737891479577', 'question': 'What is the capital of Ukraine?', 
   'options': [{'text': 'Rabat', 'voter_count': 0}, 
               {'text': 'Kyiv', 'voter_count': 1}, 
               {'text': 'Luxembourg', 'voter_count': 0}], 
       'total_voter_count': 1, 'is_closed': False, 'is_anonymous': True, 
     'type': 'quiz', 'allows_multiple_answers': False, 'correct_option_id': 1, 
     'explanation_entities': [], 'close_date': None}}

有没有办法包含投票所属的chat_data?

当机器人创建一个投票时(使用轮询,我还不能谈论 webhooks)它更新它的 bot_data{poll_id: {'chat_id': chat_id, 'message_id': message_id}} 当你的机器人处理一个答案时,你可以得到poll_id 来自 update.poll.id 然后在 context.bot_data 上使用它得到 chat_id

def poll_answer_handler(update, context):
    chatId = context.bot_data[update.poll.id]['chat_id']

重要的是 不要 stop/restart 机器人 在创建投票和请求 chat_id 之间的任何时候,否则 bot_data 将为空。解决方案?具有 持久性 使 bot_data 持久化。

PS:这适用于 Python-Telegram-Bot 12.6