代码之家  ›  专栏  ›  技术社区  ›  Shubh

如何在python电报机器人中用conversationhandler编写动态键盘?

  •  0
  • Shubh  · 技术社区  · 5 年前

    我正在尝试编写动态键盘(数据库中表中的按钮),但无法在会话处理程序的callbackqueryhandler中获得响应。

    enter image description here

    我无法进入下一个状态,即从数据库列存储的响应,

    我的代码:

    def menu(update,context):
        bot = context.bot
    
        name = db_execute("SELECT event_name FROM menu ", fetchall=True)
        button_list = []
        for each in name:
            button_list.append(InlineKeyboardButton(each, callback_data = each))
        reply_markup = InlineKeyboardMarkup(build_menu(button_list,n_cols=1)) 
        bot.send_message(chat_id=update.message.chat_id, text='Choose from the following',reply_markup=reply_markup)
        return FIRST
    
    
    def one(update, context):
        query = update.callback_query
        bot = context.bot
        print(query)
    
        name = db_execute("SELECT event_name FROM menu ", fetchall=True)
        content = db_execute("SELECT event_content FROM menu ", fetchall=True)
    
        post = dict(zip(name, content))
    
        for k,v in post.items():
            if query == k:
                bot.edit_message_text(chat_id=query.message.chat_id,
                message_id=query.message.message_id,
                text= "{}".format(v),
                reply_markup=reply_markup
                )
        return SECOND
    
    updater = Updater(token , use_context=True)
    create_db()
    dp = updater.dispatcher
    
    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('menu', menu)],
        states={
            FIRST: [CallbackQueryHandler(one)],
    
            SECOND: [CallbackQueryHandler(end)]
    
        },
       fallbacks=[CommandHandler('menu', menu)]
        )
    
    dp.add_handler(conv_handler)
    updater.start_polling() 
    
    0 回复  |  直到 5 年前