【问题标题】:Deleting a poll python-telegram-bot删除投票 python-telegram-bot
【发布时间】:2021-09-26 15:34:24
【问题描述】:

我正在使用 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)

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

【问题讨论】:

    标签: python bots telegram-bot python-telegram-bot


    【解决方案1】:

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

    但是,如果您只想删除原始消息,例如,您可以存储一个映射投票 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 的维护者。

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2012-11-16
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 2023-02-09
      • 1970-01-01
      相关资源
      最近更新 更多