在使用Python的python-telegram-bot
库时,ConversationHandler
是一个非常有用的工具,可以帮助你管理复杂的对话流程。通过MessageHandler
获取用户输入是一个常见的需求。以下是一个详细的示例,展示了如何使用ConversationHandler
和MessageHandler
来获取用户输入并进行处理。
首先,确保你已经安装了python-telegram-bot
库。如果没有安装,可以使用以下命令进行安装:
pip install python-telegram-bot
以下是一个完整的示例,展示了如何使用ConversationHandler
和MessageHandler
来获取用户输入并进行处理。
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, ConversationHandler, CallbackContext
# 定义对话状态
ASK_NAME, ASK_AGE = range(2)
def start(update: Update, context: CallbackContext) -> int:
update.message.reply_text("Hi! What's your name?")
return ASK_NAME
def ask_name(update: Update, context: CallbackContext) -> int:
user_name = update.message.text
context.user_data['name'] = user_name
update.message.reply_text(f"Nice to meet you, {user_name}! How old are you?")
return ASK_AGE
def ask_age(update: Update, context: CallbackContext) -> int:
user_age = update.message.text
if not user_age.isdigit():
update.message.reply_text("Please enter a valid age.")
return ASK_AGE
context.user_data['age'] = int(user_age)
update.message.reply_text(f"Great! So your name is {context.user_data['name']} and you are {user_age} years old.")
return ConversationHandler.END
def cancel(update: Update, context: CallbackContext) -> int:
update.message.reply_text("Conversation cancelled.")
return ConversationHandler.END
def main() -> None:
# 替换为你的Bot Token
updater = Updater("YOUR_BOT_TOKEN")
dispatcher = updater.dispatcher
# 定义对话处理器
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
ASK_NAME: [MessageHandler(Filters.text & ~Filters.command, ask_name)],
ASK_AGE: [MessageHandler(Filters.text & ~Filters.command, ask_age)],
},
fallbacks=[CommandHandler('cancel', cancel)],
)
dispatcher.add_handler(conv_handler)
# 启动Bot
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
telegram
和telegram.ext
用于与Telegram API进行交互。ASK_NAME
和ASK_AGE
。start
函数:当用户发送/start
命令时,Bot会询问用户的名字,并将对话状态设置为ASK_NAME
。ask_name
函数:当用户输入名字时,Bot会询问用户的年龄,并将对话状态设置为ASK_AGE
。ask_age
函数:当用户输入年龄时,Bot会确认用户的名字和年龄,并结束对话。cancel
函数:当用户发送/cancel
命令时,Bot会取消对话。Updater
对象,并使用你的Bot Token进行初始化。ConversationHandler
对象,并定义对话的入口点、状态和回退处理器。ConversationHandler
添加到调度器中。"YOUR_BOT_TOKEN"
替换为你的实际Bot Token。/start
命令,按照提示输入名字和年龄。领取专属 10元无门槛券
手把手带您无忧上云