Telegram python 检查来自 JSON 的键值

Telegram python check key value from JSON

我正在使用 pyhton 创建一个电报机器人,特别是以下模块

https://github.com/python-telegram-bot/python-telegram-bot

我想做的是:

我当前的 python 实现:

def echo(update: Update, context: CallbackContext) -> None:
    if 'text' in update.message:
        update.message.reply_text('I found your key value you are looking for')
    else:
        update.message.reply_text('Key not found')

def main():
    """Start the bot."""
    # Create the Updater and pass it your bot's token.
    updater = Updater(MY_TOKEN)

    # Get the dispatcher to register handlers
    dispatcher = updater.dispatcher
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()

update 对象的结构:

{
   "update_id":id_update,
   "message":{
      "message_id":1579,
      "date":1615193338,
      "chat":{
         "id":id_chat,
         "type":"private",
         "username":"XXX",
         "first_name":"XXX"
      },
      "text":"Hello Bot",
      "entities":[
         
      ],
      "caption_entities":[
         
      ],
      "photo":[
         
      ],
      "new_chat_members":[
         
      ],
      "new_chat_photo":[
         
      ],
      "delete_chat_photo":false,
      "group_chat_created":false,
      "supergroup_chat_created":false,
      "channel_chat_created":false,
      "from":{
         "id":id_chat,
         "first_name":"xxx",
         "is_bot":false,
         "username":"xxx",
         "language_code":"it"
      }
   }
}

当我测试它时,我没有从机器人那里得到任何输出,它似乎忽略了 if/else 条件。 如果我打印 update.message.text,我会正确地看到发送到机器人的输入。

谢谢大家

EDIT

我找到了解决方案,我不得不以这种方式更改传递给 MessageHandler 的过滤器

dispatcher.add_handler(MessageHandler(Filters.all, echo))

谢谢你的帮助

您的编辑很可能不是实际的解决方案。使用 Filters.all 而不是 Filters.text & ~Filters.command 只是说 MessageHandler 将捕获 any 消息,而不仅仅是包含文本且不以 a 开头的消息机器人命令。

问题在于 'text' in update.message 无法工作,因为 update.message 是一个 telegram.Message 对象并且不可迭代。因此 'text' in update.message 可能会抛出一个错误,您看不到这个错误,因为您既没有启用日志记录也没有注册错误处理程序(有关日志记录和错误处理程序的信息,请分别参见 PTB 自述文件和 wiki)。

我的猜测是更改为 'text' in update.message.text 应该可以解决问题。