Telegram Python ConversationHandler 记住旧答案
Telegram Python ConversationHandler Remember Old Answers
我正在使用 This ConversationHandler Script 作为我程序的基础。
如何从以前的状态中检索用户答案?例如,当用户被问及他们的简历时,我如何打印他们的性别(这是被问到的第一件事)?
看起来每个功能 returns 接下来的步骤(性别->照片->位置->生物)但是有没有办法查看之前的输入是什么?
我遇到了完全相同的问题,我需要保留之前用户对对话的回答。查看 Handler 文档,它是所有处理程序的基础 class。它有一个名为 pass_user_data 的参数。当设置为 True 时,它会将 user_data 字典传递给您的处理程序,并且它与发送更新的用户相关。您可以利用它来实现您正在寻找的东西。
假设我与一个入口点和两个状态进行对话:
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_data,所以我可以访问包含我之前添加的数据的字典。使用这种方法,您可以存储和访问与用户相关的处理程序之间的任何内容。
我认为已接受的解决方案已被弃用 -
https://python-telegram-bot.readthedocs.io/en/stable/telegram.ext.handler.html
pass_user_data and pass_chat_data determine whether a dict you can use to keep any data in will be sent to the callback function. Related to either the user or the chat that the update was sent in. For each update from the same user or in the same chat, it will be the same dict.
Note that this is DEPRECATED, and you should use context based callbacks. See https://git.io/fxJuV for more info.
可以在 context.user_data['var'] = val
中存储状态
我正在使用 This ConversationHandler Script 作为我程序的基础。
如何从以前的状态中检索用户答案?例如,当用户被问及他们的简历时,我如何打印他们的性别(这是被问到的第一件事)?
看起来每个功能 returns 接下来的步骤(性别->照片->位置->生物)但是有没有办法查看之前的输入是什么?
我遇到了完全相同的问题,我需要保留之前用户对对话的回答。查看 Handler 文档,它是所有处理程序的基础 class。它有一个名为 pass_user_data 的参数。当设置为 True 时,它会将 user_data 字典传递给您的处理程序,并且它与发送更新的用户相关。您可以利用它来实现您正在寻找的东西。
假设我与一个入口点和两个状态进行对话:
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_data,所以我可以访问包含我之前添加的数据的字典。使用这种方法,您可以存储和访问与用户相关的处理程序之间的任何内容。
我认为已接受的解决方案已被弃用 -
https://python-telegram-bot.readthedocs.io/en/stable/telegram.ext.handler.html
pass_user_data and pass_chat_data determine whether a dict you can use to keep any data in will be sent to the callback function. Related to either the user or the chat that the update was sent in. For each update from the same user or in the same chat, it will be the same dict.
Note that this is DEPRECATED, and you should use context based callbacks. See https://git.io/fxJuV for more info.
可以在 context.user_data['var'] = val