我如何让机器人等待回复以保存它?我的目标是将名称保存在数据库中,这已经完成了。例如,
User: /name
Bot: What do you want to name this dog?
User: dog
Bot: Dog saved as dog.
def name(update, context):
update.message.reply_text("What do you want to name this dog?")
将回复保存到数据库。
我知道,如果我使用return(update.message.text)
,它将返回/name
而不是dog,因为这是用户键入/name
时的最新消息。
我们将不胜感激!
答案 0 :(得分:0)
您可以使用ConversationHandler
来实现它。
这是一个有效的示例代码:
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters,
ConversationHandler)
TOKEN = " ... "
NAME, DOG_SAVE = range(2)
def start(update, context):
update.message.reply_text(
'send /name to activate save a dog name'
)
return NAME
def name(update, context):
update.message.reply_text('What do you want to name this dog?')
return DOG_SAVE
def dog_save(update, context):
name = update.message.text
update.message.reply_text(f'Dog saved as {name}')
return ConversationHandler.END
def main():
updater = Updater(TOKEN, use_context=True)
dp = updater.dispatcher
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
fallbacks=[],
states={
NAME: [CommandHandler('name', name)],
DOG_SAVE: [MessageHandler(Filters.text, dog_save)],
},
)
dp.add_handler(conv_handler)
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
您可以找到其他示例here