Comment example.

This commit is contained in:
Alex Root Junior 2017-06-20 05:00:45 +03:00
parent 6bace955ae
commit 18c18cb712

View file

@ -16,29 +16,45 @@ dp = Dispatcher(bot)
@dp.message_handler(commands=['start']) @dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message): async def send_welcome(message: types.Message):
"""
Entry point to conversation
"""
await message.reply("Hi there! What's your name?") await message.reply("Hi there! What's your name?")
# Set state
# This method lock all messages from user and all messages will be redirected to next step handler in state machine
state.set_state(message.chat.id, message.from_user.id, "name") state.set_state(message.chat.id, message.from_user.id, "name")
async def process_name(message, controller): async def process_name(message, controller):
"""
Process user name
"""
# Save name to storage
controller["name"] = message.text controller["name"] = message.text
await message.reply("How old are you?") await message.reply("How old are you?")
# Go to next state
controller.set_state('age') controller.set_state('age')
async def process_age(message, controller): async def process_age(message, controller):
# Check age. Age must be is digit
if not message.text.isdigit(): if not message.text.isdigit():
return await message.reply("Age should be a number.\nHow old are you?") return await message.reply("Age should be a number.\nHow old are you?")
# Save age to storage
controller["age"] = int(message.text) controller["age"] = int(message.text)
# Configure ReplyKeyboardMarkup
markup = types.ReplyKeyboardMarkup() markup = types.ReplyKeyboardMarkup()
markup.add("Male", "Female") markup.add("Male", "Female")
markup.add("Other") markup.add("Other")
await message.reply("What is your gender?", reply_markup=markup) await message.reply("What is your gender?", reply_markup=markup)
# Go to next state
controller.set_state("sex") controller.set_state("sex")
@ -46,8 +62,10 @@ async def process_sex(message, controller):
if message.text not in ["Male", "Female", "Other"]: if message.text not in ["Male", "Female", "Other"]:
return await message.reply("Bad gender name. Choose you gender from keyboard.") return await message.reply("Bad gender name. Choose you gender from keyboard.")
# Save sex to storage
controller["sex"] = message.text controller["sex"] = message.text
# Remove keyboard
markup = types.ReplyKeyboardRemove() markup = types.ReplyKeyboardRemove()
await bot.send_message(message.chat.id, await bot.send_message(message.chat.id,
f"Hi!\n" f"Hi!\n"
@ -55,9 +73,12 @@ async def process_sex(message, controller):
f"Age: {controller['age']}\n" f"Age: {controller['age']}\n"
f"Sex: {controller['sex']}", f"Sex: {controller['sex']}",
reply_markup=markup) reply_markup=markup)
# Finish conversation
controller.clear() controller.clear()
# Configure state machine
state = StateMachine(dp, { state = StateMachine(dp, {
"name": process_name, "name": process_name,
"age": process_age, "age": process_age,