Базовое применение
Файл links.py. Связи обработчиков для всех примеров ниже
from telegram_framework import links
from . import examples
bot_links = [
links.on_command(
examples.send_text_message_example,
'text_message',
'Отправка текстового сообщения'
),
links.on_command(
examples.send_html_message_example,
'html_message',
'Отправка html сообщения'
),
links.on_command(
examples.render_template_example,
'render_template',
'Форматирование по шаблону'
),
links.on_command(
examples.send_picture_example,
'send_picture',
'Отправка картинки'
),
links.on_command(
examples.send_picture_with_caption_example,
'send_picture_with_caption',
'Отправка картинки с заголовком'
),
links.on_command(
examples.send_picture_with_html_caption_example,
'send_picture_with_html_caption',
'Отправка картинки с HTML заголовком'
),
links.on_text(
examples.fixed_text_answer_example,
'Спасибо бот'
),
links.on_message(
examples.contains_text_answer_example,
lambda message: 'Привет' in message.text
),
links.on_command(
examples.get_user_id_example,
'get_user_id',
'Получение telegram id пользователя',
),
links.on_command(
examples.send_param_text_message_example,
'param_text_message',
'Отправка текстового сообщения с параметром',
'param_text_message <str:param>',
),
links.on_command(
examples.param_call_buttons_example,
'param_call_buttons',
'Кнопки для обработчиков с параметрами',
),
links.on_call(
examples.put_button_param_handler,
'put_on_me_params',
params_pattern='put_on_me_params <str:param>'
),
links.on_message(examples.echo_answer_example),
]
Отправка текстового сообщения
def send_text_message_example(bot, message):
text = 'Пример отправки обычного текстового сообщения'
text_message = messages.create_message(
text=text,
sender=bot,
)
return actions.send_message(message.chat, text_message)
Пример теста
def test_send_text_message_example(self):
"""
Test /text_message: success
"""
chat = self.assertCommandWasHandled('/text_message', self.chat)
self.assertChatLastMessageTextEqual(
chat,
'Пример отправки обычного текстового сообщения',
)
Отправка текстового сообщения в формате HTML
def send_html_message_example(bot, message):
text = '<b>Пример</b> <i>отправки</i> <s>текстового</s> HTML сообщения'
text_message = messages.create_message(
text=text,
sender=bot,
format_type='HTML',
)
return actions.send_message(message.chat, text_message)
Пример теста
def test_send_html_message_example(self):
"""
Test /html_message: success
"""
chat = self.assertCommandWasHandled('/html_message', self.chat)
self.assertChatLastMessageTextEqual(
chat,
'<b>Пример</b> <i>отправки</i> <s>текстового</s> HTML сообщения',
)
Рендеринг шаблона в формате HTML
def render_template_example(bot, message):
context = {
'this': 'Это',
'message': 'сообщение',
'make': 'было создано по шаблону'
}
response_message = messages.create_template_message(
sender=bot,
template='demo/bot/reply.html',
context=context,
)
return actions.send_message(message.chat, response_message)
Пример теста
def test_render_template_example(self):
"""
Test /render_template: success
"""
chat = self.assertCommandWasHandled('/render_template', self.chat)
self.assertChatLastMessageTextEqual(
chat,
'<b>Это</b> <i>сообщение</i> было создано по шаблону',
)
Отправка ответа на сообщение
def echo_answer_example(bot, message):
text = f'На любое неизвестное сообщение я умею присылать его в ответ: {message.text}'
echo_reply = messages.create_reply(message, text, bot)
return actions.send_reply(echo_reply)
Пример теста
def test_echo_answer_example(self):
"""
Test send any text message: success
"""
text = 'any message'
chat = self.assertTextMessageWasHandled(text, self.chat)
self.assertChatLastMessageTextEqual(
chat,
f'На любое неизвестное сообщение я умею присылать его в ответ: {text}',
)
Ответ на конкретное сообщение
def fixed_text_answer_example(bot, message):
text = f'На сообщение {message.text}, я даю фиксированный ответ: Пожалуйста'
reply = messages.create_reply(message, text, bot)
return actions.send_reply(reply)
Пример теста
def test_fixed_text_answer_example(self):
"""
Test send "Спасибо бот": success
"""
text = 'Спасибо бот'
chat = self.assertTextMessageWasHandled(text, self.chat)
self.assertChatLastMessageTextEqual(
chat,
f'На сообщение {text}, я даю фиксированный ответ: Пожалуйста',
)
Ответ на сообщение содержащее текст
def contains_text_answer_example(bot, message):
text = 'На сообщение содержащее "Привет", я говорю "И тебе привет"'
reply = messages.create_reply(message, text, bot)
return actions.send_reply(reply)
Пример теста
def test_contains_text_answer_example(self):
"""
Test send "Спасибо бот": success
"""
text = 'Привет бот'
chat = self.assertTextMessageWasHandled(text, self.chat)
self.assertChatLastMessageTextEqual(
chat,
'На сообщение содержащее "Привет", я говорю "И тебе привет"',
)
Отправка изображения
def send_picture_example(bot, message):
file_path = Path(settings.BASE_DIR) / 'static' / 'logo_1280_640.png'
image = messages.create_image(bot, file_path)
return actions.send_image(message.chat, image)
Пример теста
def test_send_picture_example(self):
"""
Test /send_picture: success
"""
chat = self.assertCommandWasHandled('/send_picture', self.chat)
last_message = chats.get_last_message(chat)
self.assertIsInstance(last_message, messages.Image)
self.assertIn('logo_1280_640.png', str(last_message.file_path))
Отправка изображения с заголовком
def send_picture_with_caption_example(bot, message):
file_path = Path(settings.BASE_DIR) / 'static' / 'logo_1280_640.png'
caption = messages.create_message('Это логотипы DTF', bot)
image = messages.create_image(bot, file_path, caption)
return actions.send_image(message.chat, image)
Пример теста
def test_send_picture_with_caption_example(self):
"""
Test /send_picture_with_caption: success
"""
chat = self.assertCommandWasHandled('/send_picture_with_caption', self.chat)
last_message = chats.get_last_message(chat)
self.assertIsNotNone(last_message.caption)
self.assertEqual('Это логотипы DTF', last_message.caption.text)
Отправка изображения с заголовком в формате HTML
def send_picture_with_html_caption_example(bot, message):
file_path = Path(settings.BASE_DIR) / 'static' / 'logo_1280_640.png'
caption = messages.create_message(
'Это логотипы <b>DTF</b>',
bot,
format_type='HTML'
)
image = messages.create_image(bot, file_path, caption)
return actions.send_image(message.chat, image)
Пример теста
def test_send_picture_with_html_caption_example(self):
"""
Test /send_picture_with_caption: success
"""
chat = self.assertCommandWasHandled('/send_picture_with_html_caption', self.chat)
last_message = chats.get_last_message(chat)
self.assertIsNotNone(last_message.caption)
self.assertEqual('Это логотипы <b>DTF</b>', last_message.caption.text)
Получение id пользователя
def get_user_id_example(bot, message):
user = message.sender
user_id = user.id
response_message = messages.create_message(
text=f'Ваш telegram id: {user_id}',
sender=bot,
)
return actions.send_message(message.chat, response_message)
Пример теста
def test_get_user_id_example(self):
"""
Test /get_user_id
"""
chat = self.assertCommandWasHandled('/get_user_id', self.chat)
self.assertChatLastMessageTextEqual(chat, f'Ваш telegram id: {self.client.id}')
Пример команды с параметром
def send_param_text_message_example(bot, message, param):
text = f'Пример отправки обычного текстового сообщения с параметром "{param}"'
text_message = messages.create_message(
text=text,
sender=bot,
)
return actions.send_message(message.chat, text_message)
Пример теста
def test_send_param_text_message_example(self):
"""
Test /param_text_message <str:param>: success
"""
chat = self.assertCommandWasHandled('/param_text_message PARAM', self.chat)
self.assertChatLastMessageTextEqual(
chat,
'Пример отправки обычного текстового сообщения с параметром "PARAM"',
)
Пример вызова (call) с параметром
def param_call_buttons_example(bot, message):
keyboard = keyboards.inline.Keyboard(
buttons=[
keyboards.inline.Button('Параметр ONE', 'put_on_me_params ONE'),
keyboards.inline.Button('Параметр TWO', 'put_on_me_params TWO'),
],
layout=layouts.Layout(columns_count=2)
)
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_param_handler(bot, message, param):
reply_message = messages.create_message(
text=f'Реакция на параметр {param}',
sender=bot,
)
return actions.send_message(message.chat, reply_message)
Пример теста
def test_param_call_buttons_example(self):
"""
Test /param_call_buttons: success
"""
chat = self.assertCommandWasHandled('/param_call_buttons', self.chat)
self.assertChatLastMessageTextEqual(
chat,
'Кнопки для обработчика с параметром',
)
self.assertChatLastMessageKeyboardLen(chat, 2)
def test_put_button_param_handler(self):
"""
Test button "put_on_me_params <str:param>": success
"""
chat = self.assertCallWasHandled('put_on_me_params PARAMPAM', self.chat)
self.assertChatLastMessageTextEqual(chat, 'Реакция на параметр PARAMPAM')