Использование клавиатуры
Файл links.py. Связи обработчиков для всех примеров ниже
from telegram_framework import links
from . import examples
bot_links = [
links.on_command(
examples.message_with_inline_keyboard_example,
'message_with_inline_keyboard', 'Сообщение с кнопкой'
),
links.on_command(
examples.message_with_reply_keyboard_example,
'message_with_reply_keyboard',
'Сообщение с клавиатурой',
),
links.on_text(
examples.put_keyboard_handler,
'Нажми меня 🔍'
),
links.on_call(
examples.put_button_handler, 'put_on_me'
),
]
Встроенная кнопка
def message_with_inline_keyboard_example(bot, message):
keyboard = keyboards.inline.Keyboard(
buttons=[
keyboards.inline.Button('Нажми меня', 'put_on_me'),
]
)
message_with_text = messages.create_message('Пример сообщения с кнопкой', sender=bot)
message_with_keyboard = messages.add_keyboard(message_with_text, keyboard)
return actions.send_message(message.chat, message_with_keyboard)
def put_button_handler(bot, message):
reply_message = messages.create_message(
text='Вы нажали кнопку, а я обработал нажатие',
sender=bot,
)
return actions.send_message(message.chat, reply_message)
Пример теста
def test_message_with_inline_keyboard_example(bot_client, chat):
"""
Test /message_with_inline_keyboard: success
"""
chat = asserts.assert_command_was_handled(
'/message_with_inline_keyboard',
chat,
bot_client,
)
asserts.assert_chat_last_message_text_equal(
chat,
'Пример сообщения с кнопкой',
)
keyboard = asserts.assert_chat_last_message_keyboard_len(chat, 1)
assert 'Нажми меня' == keyboard.buttons[0].text
def test_put_button_handler(bot_client, chat):
"""
Test button "put_on_me": success
"""
chat = asserts.assert_call_was_handled(
'put_on_me',
chat,
bot_client,
)
asserts.assert_chat_last_message_text_equal(
chat,
'Вы нажали кнопку, а я обработал нажатие'
)
Клавиатура (Внизу чата)
def message_with_reply_keyboard_example(bot, message):
keyboard = keyboards.reply.Keyboard(
name = 'Пример клавиатуры',
buttons=[
keyboards.reply.Button('Нажми меня 🔍'),
]
)
message_with_text = messages.create_message('Пример сообщения с клавиатурой', sender=bot)
message_with_keyboard = messages.add_keyboard(message_with_text, keyboard)
return actions.send_message(message.chat, message_with_keyboard)
def put_keyboard_handler(bot, message):
reply_message = messages.create_message(
text='Вы нажали на клавиатуру, а я обработал нажатие и убрал клавиатуру',
sender=bot,
)
reply_message = messages.add_keyboard(reply_message, keyboards.reply.EmptyKeyboard())
return actions.send_message(message.chat, reply_message)
Пример теста
def test_message_with_reply_keyboard_example(bot_client, chat):
"""
Test /message_with_reply_keyboard: success
"""
chat = asserts.assert_command_was_handled(
'/message_with_reply_keyboard',
chat,
bot_client,
)
asserts.assert_chat_last_message_text_equal(
chat,
'Пример сообщения с клавиатурой',
)
asserts.assert_chat_keyboard_len(chat, 1)
keyboard = asserts.assert_chat_keyboard_name(chat, 'Пример клавиатуры')
assert 'Нажми меня 🔍' == keyboard.buttons[0].text
def test_put_keyboard_handler(bot_client, chat):
"""
Test text "Нажми меня 🔍": success
"""
chat = asserts.assert_text_message_was_handled(
'Нажми меня 🔍',
chat,
bot_client,
)
asserts.assert_chat_last_message_text_equal(
chat,
'Вы нажали на клавиатуру, а я обработал нажатие и убрал клавиатуру'
)
asserts.assert_keyboard_not_in_chat(chat)