如何等待用户回复? (带python-telegram-bot的电报bot)

时间:2020-06-06 10:20:38

标签: python bots telegram python-telegram-bot

我如何让机器人等待回复以保存它?我的目标是将名称保存在数据库中,这已经完成了。例如,

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时的最新消息。

我们将不胜感激!

1 个答案:

答案 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

样本输出: enter image description here