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"
因为NAME
、GENDER
和AGE
都等于0
,你的会话处理程序只有一个状态,即最后一个。要了解这一点,请在 python 控制台中尝试 运行 print({0:1, 0:2, 0:3})
。因此,要解决此问题,请确保您的状态具有唯一值。
免责声明:我目前是 python-telegram-bot
.
的维护者
我想写一个简单的注册机器人,但我犯了一个错误,不知道如何解决,请帮助我。 我的问题是这些函数没有发送消息: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"
因为NAME
、GENDER
和AGE
都等于0
,你的会话处理程序只有一个状态,即最后一个。要了解这一点,请在 python 控制台中尝试 运行 print({0:1, 0:2, 0:3})
。因此,要解决此问题,请确保您的状态具有唯一值。
免责声明:我目前是 python-telegram-bot
.