Последовательность ввода данных
Файл links.py. Связи обработчиков для всех примеров ниже
from telegram_framework import links
from . import examples
bot_links = [
links.on_command(
examples.start_sequence_example,
'sequence_example',
'Последовательность ввода данных',
# next_steps=[actions.sequence_last_name_example]
),
]
Последовательный ввод данных
def start_sequence_example(bot, message):
keyboard = keyboards.force.Keyboard()
message_with_text = messages.create_message('Как бы вас звали на букву "Л"?:', sender=bot)
message_with_keyboard = messages.add_keyboard(message_with_text, keyboard)
chat = actions.send_message(message.chat, message_with_keyboard)
chat = actions.wait_response(bot, chat, sequence_first_name_example)
return chat
def sequence_first_name_example(bot, message):
first_name = message.text
if first_name.startswith('Л'):
chat = chats.add_note(message.chat, first_name=first_name)
keyboard = keyboards.force.Keyboard()
message_with_text = messages.create_message(
'Какой бы была ваша фамилия на букву "Л"?:',
sender=bot
)
message_with_keyboard = messages.add_keyboard(message_with_text, keyboard)
chat = actions.send_message(chat, message_with_keyboard)
chat = actions.wait_response(bot, chat, sequence_last_name_example)
return chat
keyboard = keyboards.force.Keyboard()
message_with_text = messages.create_message(
'Неверно введено имя, пожалуйста введите снова:',
sender=bot
)
message_with_keyboard = messages.add_keyboard(message_with_text, keyboard)
chat = actions.send_message(message.chat, message_with_keyboard)
chat = actions.wait_response(bot, chat, sequence_first_name_example)
return chat
def sequence_last_name_example(bot, message):
last_name = message.text
if last_name.startswith('Л'):
first_name = chats.get_note(message.chat, 'first_name', '?')
result_text = f'Привет, {first_name} {last_name}'
message_with_text = messages.create_message(result_text, sender=bot)
chat = actions.send_message(message.chat, message_with_text)
return chat
keyboard = keyboards.force.Keyboard()
message_with_text = messages.create_message(
'Неверно введена фамилия, пожалуйста введите снова:',
sender=bot
)
message_with_keyboard = messages.add_keyboard(message_with_text, keyboard)
chat = actions.send_message(message.chat, message_with_keyboard)
chat = actions.wait_response(bot, chat, sequence_last_name_example)
return chat
Пример теста
def test_sequence_example(self):
"""
Test /sequence_example
"""
chat = self.assertCommandWasHandled('/sequence_example', self.chat)
last_message = self.assertChatLastMessageTextEqual(
chat,
'Как бы вас звали на букву "Л"?:',
)
self.assertKeyboardInMessage(last_message)
chat = self.assertTextMessageWasHandled('Жук', chat)
last_message = chats.get_last_message(chat)
self.assertEqual('Неверно введено имя, пожалуйста введите снова:', last_message.text)
chat = self.assertTextMessageWasHandled('Лео', chat)
last_message = chats.get_last_message(chat)
self.assertEqual('Какой бы была ваша фамилия на букву "Л"?:', last_message.text)
chat = self.assertTextMessageWasHandled('Жук', chat)
last_message = chats.get_last_message(chat)
self.assertEqual('Неверно введена фамилия, пожалуйста введите снова:', last_message.text)
chat = self.assertTextMessageWasHandled('Лось', chat)
last_message = chats.get_last_message(chat)
self.assertEqual('Привет, Лео Лось', last_message.text)
chat = self.assertCommandWasHandled('/start', chat)
last_message = chats.get_last_message(chat)
self.assertIn('Привет, Я Demo Bot', last_message.text)