没有聊天数据的 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
当接收到纯消息 (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