首页 > 解决方案 > 删除投票 python-telegram-bot

问题描述

我正在使用 python 中的 python-telegram-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)

因为有人会删除一条消息,但它没有用,我认为是因为电报对民意调查的处理方式不同。提前致谢

标签: pythonbotstelegram-botpython-telegram-bot

解决方案


message_id参数bot.delete_message需要消息 id,而不是轮询 id。请注意,投票更新不包含message_id,因为例如可以转发投票,因此即使在您的机器人甚至不是成员的聊天中,它们也可以有多个 message_id。

但是,如果您只想删除原始消息,您可以例如在 eg(chat_id, message_id)中存储一个映射轮询 id -> context.bot_data,然后用于chat_id, message_id = context.bot_data[update.poll.id]获取存储的值以删除该消息。请注意,context.user/chat_data此处无法解决此问题,因为投票更新与特定用户/聊天无关,因此context.user/chat_dataNonePollHandler回调中。

除了存储之外(chat_id, message_id),您还可以只存储返回的Message对象bot.send_poll- 然后您只需调用context.bot_data[update.poll.id].delete().

参考:


免责声明:我目前是python-telegram-bot.


推荐阅读