python-telegram-bot,ConversationHandler(states) 转到最后一个键,忽略其余部分

python-telegram-bot, ConversationHandler(states) goes to the last key,ignore the rest

我想写一个简单的注册机器人,但我犯了一个错误,不知道如何解决,请帮助我。 我的问题是这些函数没有发送消息:name_handler、age_handler.

from telegram import Update
from telegram import (ReplyKeyboardMarkup, ReplyKeyboardRemove)

from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters,
                          ConversationHandler)

NAME, GENDER, AGE = 0, 0, 0
user_data = {}


def start_handler(update: Update, context):
    update.message.reply_text(
        "enter ur name",
        reply_markup=ReplyKeyboardRemove(),
    )
    return NAME


def name_handler(update: Update, context):
    user_data[NAME] = update.message.text

    update.message.reply_text("enter ur gender")

    return GENDER


def age_handler(update: Update, context):
    user_data[GENDER] = update.message.text
    update.message.reply_text("enter ur age")

    return AGE


def finish_handler(update: Update, context):
    user_data[AGE] = update.message.text

    update.message.reply_text(f"registered successfully, you are {user_data[NAME]}, {user_data[GENDER]}, "
                              f"{user_data[AGE]}")

    return ConversationHandler.END


def cancel_handler(update: Update, context):
    print("bye")


def main():
    updater = Updater(
        token="token",
        use_context=True,
    )

    dp = updater.dispatcher

    conv_handler = ConversationHandler(
        entry_points=[
            CommandHandler("start", start_handler),
        ],
        states={
            NAME: [MessageHandler(Filters.all, name_handler)],
            GENDER: [MessageHandler(Filters.all, age_handler)],
            AGE: [MessageHandler(Filters.all, finish_handler)]
        },
        fallbacks=[CommandHandler("cancel", cancel_handler)],
    )

    dp.add_handler(conv_handler)

    updater.start_polling()
    updater.idle()


main()

after "enter ur name" must be "enter ur gender" but telegram wrote "registered successfully"

因为NAMEGENDERAGE都等于0,你的会话处理程序只有一个状态,即最后一个。要了解这一点,请在 python 控制台中尝试 运行 print({0:1, 0:2, 0:3})。因此,要解决此问题,请确保您的状态具有唯一值。


免责声明:我目前是 python-telegram-bot.

的维护者