Базовое применение

Отправка текстового сообщения

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')