Диалоговые сценарии

Для создания диалогов используется объект типа:

ConversationHandler ( entry_points=[...] , states={...}, fallbacks=[...] )

entry_points=[...] - указывается команда старта диалога

states={...} - словарь с ключами и командами, с помощью которого создаются последовательности команд

fallbacks=[...] - команда выполняемая в конце диалога
Создадим объект conv_handler в методе main и укажем диспетчеру

dispatcher.add_handler(conv_handler)

диалог будет состоять из 3 команд MessageHandler
conv_handler = ConversationHandler (entry_points = [CommandHandler("start", start)],
states = {
ONE: [MessageHandler(Filters.text , one_states) ],
TWO: [MessageHandler(Filters.text , two_states) ],
THREE: [MessageHandler(Filters.text , three_states)]
},
fallbacks = [CommandHandler("cancel", cancel)]
)
Метод start() является командой запуска диалога. Изменим его, указав return ONE. После выполнения метода управление перейдет к команде с указанным ключом ONE в словаре states объекта conv_handler
def start ( update : Update, context: CallbackContext ) -> int:
____update.message.reply_text ( 'Привет! Ты любишь программировать?' )
____return ONE
Метод one_states демонстрирует логическую проверку ответа пользователя и перенаправляет его в метод TWO или THREE
def one_states ( update : Update, context : CallbackContext ) -> int:
____answer = update.message.text
____if answer.lower() == 'да' or answer.lower() == 'конечно' :
________update.message.reply_text ( 'Какой язык программирования тебе нравится ?' )
________return TWO
____else :
________update.message.reply_text ( 'Что Ты тогда любишь делать ?' )
________return THREE
Метод two_states демонстрирует логическую проверку ответа пользователя и простой ответ. Метод возвращает метку окончания диалога
def two_states ( update : Update, context: CallbackContext ) -> int:
____answer = update.message.text
____if answer.lower() == 'python' or answer.lower() == 'c++' or answer.lower() == 'c#':
________update.message.reply_text ( 'Ты красавчик!' )
____else :
________update.message.reply_text ( 'Я не знаю такой язык - буду Гуглить' )
____return ConversationHandler.END
Метод three_states демонстрирует логическую проверку ответа пользователя и простой ответ. Метод возвращает метку окончания диалога
def three_states ( update : Update, context: CallbackContext ) -> int:
____answer = update.message.text
____if answer.lower() == 'играть' or answer.lower() == 'спать' :
________update.message.reply_text ( 'Я тоже люблю это делать' )
____else :
________update.message.reply_text ( 'А я люблю поспать' )
____return ConversationHandler.END