Последовательность ввода данных
Файл links.py. Связи обработчиков для всех примеров ниже
from telegram_framework import links
from . import examples
bot_links = [
links.on_command(
examples.start_sequence_example,
'sequence_example',
'Последовательность ввода данных',
),
links.on_command(
examples.start_sequence_form_example,
'sequence_form_example',
'Последовательность ввода данных (Django Формы)',
),
]
Последовательный ввод данных
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
Пример теста
@pytest.mark.parametrize('command', [
'/sequence_example',
'/sequence_form_example',
])
def test_sequence_example(bot_client, chat, command):
"""
Test /sequence_example
"""
chat = asserts.assert_command_was_handled(
command,
chat,
bot_client,
)
last_message = asserts.assert_chat_last_message_text_equal(
chat,
'Как бы вас звали на букву "Л"?:',
)
asserts.assert_keyboard_in_message(last_message)
chat = asserts.assert_text_message_was_handled(
'Жук',
chat,
bot_client,
)
last_message = chats.get_last_message(chat)
assert 'Неверно введено имя, пожалуйста введите снова:' == last_message.text
chat = asserts.assert_text_message_was_handled(
'Лео',
chat,
bot_client,
)
last_message = chats.get_last_message(chat)
assert 'Какой бы была ваша фамилия на букву "Л"?:' == last_message.text
chat = asserts.assert_text_message_was_handled(
'Жук',
chat,
bot_client,
)
last_message = chats.get_last_message(chat)
assert 'Неверно введена фамилия, пожалуйста введите снова:' == last_message.text
chat = asserts.assert_text_message_was_handled(
'Лось',
chat,
bot_client,
)
last_message = chats.get_last_message(chat)
assert 'Привет, Лео Лось' == last_message.text
chat = asserts.assert_command_was_handled(
'/start',
chat,
bot_client,
)
last_message = chats.get_last_message(chat)
assert 'Привет, Я Demo Bot' in last_message.text