Сложные обработчики
Файл links.py. Связи обработчиков для всех примеров ниже
from telegram_framework import links
from . import examples
bot_links = [
links.on_command(
examples.complex_message_example,
'complex_message',
'Пример всех функций в одном месте'
),
]
Пример сложной логики
def complex_message_example(bot, message):
first_message = messages.create_message(
text='Первая часть сообщения',
sender=bot,
)
keyboard = keyboards.reply.Keyboard(
name='Пример клавиатуры',
buttons=[
keyboards.reply.Button('Нажми меня 🔍'),
]
)
first_message = messages.add_keyboard(first_message, keyboard)
chat = actions.send_message(message.chat, first_message)
file_path = Path(settings.BASE_DIR) / 'static' / 'logo_1280_640.png'
caption = messages.create_message(
'Пример <b>комплексного</b> сообщения',
bot,
format_type='HTML'
)
image = messages.create_image(bot, file_path, caption)
keyboard = keyboards.inline.Keyboard(
buttons=[
keyboards.inline.Button('Нажми меня', 'put_on_me'),
]
)
image = messages.add_keyboard(image, keyboard)
return actions.send_image(chat, image)
Пример теста
def test_complex_message_example(self):
"""
Test /complex_message
"""
chat = self.assertCommandWasHandled('/complex_message', self.chat)
self.assertChatMessagesCount(chat, 3)
last_message = chats.get_last_message(chat)
self.assertIsInstance(last_message, messages.Image)
self.assertIn('logo_1280_640.png', str(last_message.file_path))
self.assertIsNotNone(last_message.caption)
self.assertEqual('Пример <b>комплексного</b> сообщения', last_message.caption.text)
self.assertChatKeyboardName(chat, 'Пример клавиатуры')
keyboard = self.assertChatKeyboardLen(chat, 1)
self.assertEqual('Нажми меня 🔍', keyboard.buttons[0].text)
self.assertChatLastMessageKeyboardLen(chat, 1)