首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python-电报-bot(理论)中使用内联查询进行多选择菜单?

如何在python-电报-bot(理论)中使用内联查询进行多选择菜单?
EN

Stack Overflow用户
提问于 2022-09-01 16:07:14
回答 1查看 101关注 0票数 0

我希望使用InlineKeyboardMarkup创建一个多选择菜单,用户可以在其中一次选择多个东西,然后按另一个按钮来保存对话中的信息,比如复选框表单。

这是我想象中的逻辑,其中如果temp仍然不是"continue"的话,while循环将继续更新一个"continue",如您所见。

代码语言:javascript
运行
复制
async def select_subjects(update: Update, context: ContextTypes) -> str:
        temp = {}
        query = update.callback_query
    
        while query.data != "continue":
    
            await query.answer()
    
            if query.data in temp:
                temp[query.data] = False
            else:
                temp[query.data] = True
    
            query = update.callback_query

        return "next"

问题是,如果我尝试在"continue"按钮之前单击一些按钮,就会出现以下错误:

代码语言:javascript
运行
复制
telegram.error.BadRequest: Query is too old and response timeout expired or query id is invalid

temp仍然是空的。你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-08 14:11:29

好的,同样感谢CallMeStag的帮助,我找到了一个解决这个问题的方法,它涉及到使用python-telegram-botcontext.user_data特性,如下所示。这是首先显示选项(本例中的主题)的函数。

代码语言:javascript
运行
复制
async def display_subjects(update: Update, context: ContextTypes) -> str:

    query = update.callback_query
    await query.answer()

    # Fuction that returns a simple example of a dict 
    # {"Maths": False, "Science": False, "Art": False}
    subject_list = find_subjects() 

    for i in subject_list:
        # Every subject in the dict is now put into the context.user_data with 
        # the False forced value
        context.user_data[i] = False

    await query.edit_message_text(SUBJECT_LIST, reply_markup=keyboard(subject_list))

    return "select_subjects"

这就是管理user_data更新的函数。

代码语言:javascript
运行
复制
async def select_subjects(update: Update, context: ContextTypes) -> str or int:
    query = update.callback_query

    await query.answer()

    if query.data != "continue":

        if not context.user_data[query.data]:
            context.user_data[query.data] = True
        elif context.user_data[query.data]:
            context.user_data[query.data] = False

        subjects_list = context.user_data

        await query.edit_message_reply_markup(keyboard(subjects_list))
        return "select_subjects"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73572463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档