我正在使用python中的python-电报- bot库开发一个电报机器人,我希望我的机器人向用户发送一个测试,这里的代码是:
question = dict_api.get_question()
word = question['word']
answer = question['answer']
options = question['options']
q = f"What is the translation of the word '{word}'"
context.bot.send_poll(chat_id=person_id, question=q, options=options, type=Poll.QUIZ, correct_option_id=answer)
我有PollHandler来处理响应,当用户响应的时候,我想让机器人为用户删除测试,我怎么做呢?
我试着删除它
context.bot.delete_message(message_id=update.poll.id, chat_id=chat_id)
因为有人会删除一条信息,但它不起作用,我想是因为民意测验在电报中的处理方式不同。提前感谢
发布于 2021-07-18 22:18:07
message_id
参数bot.delete_message
需要消息id,而不是轮询id。请注意,轮询更新不包含message_id
,因为轮询可以被转发,因此即使在您的bot甚至不是成员的聊天中,它们也可以具有多个message_ids。
但是,如果只想删除原始消息,可以将映射轮询id -> (chat_id, message_id)
存储在例如context.bot_data
中,然后使用chat_id, message_id = context.bot_data[update.poll.id]
将存储的值返回到删除消息。请注意,context.user/chat_data
在这里不能处理这个问题,因为轮询更新与特定的用户/聊天没有关联,因此context.user/chat_data
将是PollHandler
回调中的None
。
与其存储(chat_id, message_id)
,还可以存储bot.send_poll
返回的Message
对象--然后只需调用context.bot_data[update.poll.id].delete()
。
裁判官:
免责声明:我目前是python-telegram-bot
的维护者。
https://stackoverflow.com/questions/68432560
复制相似问题