电报Python会话处理程序记住旧答案

电报Python会话处理程序记住旧答案,python,telegram,telegram-bot,python-telegram-bot,Python,Telegram,Telegram Bot,Python Telegram Bot,我正在使用它作为我的计划的基础 如何从以前的状态检索用户答案?例如,当用户被问及他们的简历时,我如何打印他们的性别(这是第一个被问及的问题) 看起来每个函数都会返回下一个步骤(性别->照片->位置->生物),但是有没有办法查看以前的输入是什么?我遇到了完全相同的问题,我需要保留以前用户的对话答案。看看文档,它是所有处理程序的基类。它有一个名为pass\u user\u data的参数。当设置为True时,它会将user_数据字典传递给处理程序,并且它与发送更新的用户相关。你可以利用它来实现你想要

我正在使用它作为我的计划的基础

如何从以前的状态检索用户答案?例如,当用户被问及他们的简历时,我如何打印他们的性别(这是第一个被问及的问题)


看起来每个函数都会返回下一个步骤(性别->照片->位置->生物),但是有没有办法查看以前的输入是什么?

我遇到了完全相同的问题,我需要保留以前用户的对话答案。看看文档,它是所有处理程序的基类。它有一个名为pass\u user\u data的参数。当设置为True时,它会将user_数据字典传递给处理程序,并且它与发送更新的用户相关。你可以利用它来实现你想要的

假设我与一个入口点和两个状态进行了对话:

def build_conversation_handler():
    conversation_handler = ConversationHandler(
        entry_points=[CommandHandler('command', callback=show_options)],
        states={
            PROCESS_SELECT: [CallbackQueryHandler(process_select, pass_user_data=True)],
            SOME_OTHER: [MessageHandler(filters=Filters.text, callback=some_other, pass_user_data=True)],
        },
    )
以下是对话的处理程序:

def show_options(bot, update):
    button_list = [
        [InlineKeyboardButton("Option 1", callback_data="Option 1"),
         InlineKeyboardButton("Option 2", callback_data="Option 2")]]

    update.message.reply_text("Here are your options:", reply_markup=InlineKeyboardMarkup(button_list))
    return PROCESS_SELECT

def process_select(bot, update, user_data):
    query = update.callback_query
    selection = query.data
    # save selection into user data
    user_data['selection'] = selection
    return SOME_OTHER

def some_other(bot, update, user_data):
    # here I get my old selection
    old_selection = user_data['selection']

在第一个处理程序中,我向用户显示选择选项的键盘,在下一个处理程序中,我从回调查询中获取选择并将其存储到用户数据中。最后一个处理程序是一个消息处理程序,因此它没有回调数据,但由于我向其中添加了user_数据,因此我可以使用前面添加的数据访问字典。使用这种方法,您可以在处理程序之间存储和访问与用户相关的任何内容。

我面临的问题与我需要为对话保留以前的用户答案的问题完全相同。看看文档,它是所有处理程序的基类。它有一个名为pass\u user\u data的参数。当设置为True时,它会将user_数据字典传递给处理程序,并且它与发送更新的用户相关。你可以利用它来实现你想要的

假设我与一个入口点和两个状态进行了对话:

def build_conversation_handler():
    conversation_handler = ConversationHandler(
        entry_points=[CommandHandler('command', callback=show_options)],
        states={
            PROCESS_SELECT: [CallbackQueryHandler(process_select, pass_user_data=True)],
            SOME_OTHER: [MessageHandler(filters=Filters.text, callback=some_other, pass_user_data=True)],
        },
    )
以下是对话的处理程序:

def show_options(bot, update):
    button_list = [
        [InlineKeyboardButton("Option 1", callback_data="Option 1"),
         InlineKeyboardButton("Option 2", callback_data="Option 2")]]

    update.message.reply_text("Here are your options:", reply_markup=InlineKeyboardMarkup(button_list))
    return PROCESS_SELECT

def process_select(bot, update, user_data):
    query = update.callback_query
    selection = query.data
    # save selection into user data
    user_data['selection'] = selection
    return SOME_OTHER

def some_other(bot, update, user_data):
    # here I get my old selection
    old_selection = user_data['selection']

在第一个处理程序中,我向用户显示选择选项的键盘,在下一个处理程序中,我从回调查询中获取选择并将其存储到用户数据中。最后一个处理程序是一个消息处理程序,因此它没有回调数据,但由于我向其中添加了user_数据,因此我可以使用前面添加的数据访问字典。使用这种方法,您可以在处理程序之间存储和访问与用户相关的任何内容。

我认为已接受的解决方案已被弃用-

pass_user_data和pass_chat_data确定可用于保存任何数据的dict是否将发送到回调函数。与发送更新的用户或聊天相关。对于来自同一用户或同一聊天室的每次更新,都将是相同的命令

注意,这是不推荐的,您应该使用基于上下文的回调。有关更多信息,请参阅


可以在
上下文中存储状态。用户数据['var']=val

我认为已接受的解决方案已被弃用-

pass_user_data和pass_chat_data确定可用于保存任何数据的dict是否将发送到回调函数。与发送更新的用户或聊天相关。对于来自同一用户或同一聊天室的每次更新,都将是相同的命令

注意,这是不推荐的,您应该使用基于上下文的回调。有关更多信息,请参阅


可以在
上下文中存储状态。用户数据['var']=val

您有数据库吗?我认为不需要数据库来记住用户在同一脚本中输入的内容。我只是想把用户信息从以前的函数传递到另一个函数中。你找到方法了吗?我也面临同样的问题。你有数据库吗?我不认为需要数据库来记住用户在同一脚本中输入的内容。我只是想把用户信息从以前的函数传递到另一个函数中。你找到方法了吗?我也面临同样的问题。