python-telegram-bot的ConversationHandler状态异常导致回调不触发问题求助
问题根因
你代码中定义的三个对话状态常量NAME、GENDER、AGE被赋值为了相同的整数0,而Python字典的键具有唯一性,你传入ConversationHandler的states参数在初始化时,后面的键值对会覆盖前面的,最终states中仅保留键为0对应的finish_handler,所以用户输入姓名后会直接触发最终的注册成功逻辑。
修复方案
- 调整状态常量的赋值,确保每个状态值唯一:
# 将原有赋值替换为以下内容 NAME, GENDER, AGE = 0, 1, 2
- (可选优化)当前你使用全局字典
user_data存储用户信息,多用户同时注册时会出现数据覆盖问题,建议改用python-telegram-bot内置的context.user_data存储单用户私有数据,修改后各handler的示例如下:
def name_handler(update: Update, context): context.user_data["name"] = update.message.text update.message.reply_text("enter ur gender") return GENDER def age_handler(update: Update, context): context.user_data["gender"] = update.message.text update.message.reply_text("enter ur age") return AGE def finish_handler(update: Update, context): context.user_data["age"] = update.message.text update.message.reply_text(f"registered successfully, you are {context.user_data['name']}, {context.user_data['gender']}, {context.user_data['age']}") return ConversationHandler.END
内容的提问来源于stack exchange,提问作者Y.dffu
相关产品推荐
相关产品推荐

