Skip to main content
Telegram использует сложную систему entities для форматирования текста (жирный, курсив, ссылки и т.д.). CactusLib предоставляет мощные парсеры, которые полностью абстрагируют эту систему, позволяя вам работать с привычными HTML или Markdown. Большинство плагинов теряют форматированный текст команды от пользователя и обрабатывают/выдают на выход обычный текст. Это может привести к проблемам с форматированием, если пользователь использует его в своих сообщениях.

Примеры

1. Прочитать форматирование сообщения и добавить к нему текст
sign.plugin
class MyPlugin(CactusUtils.Plugin):
    @command(doc="Добавляет подпись к ответному сообщению")
    def sign(self, cmd: CactusUtils.Command):
        # Проверяем, что это ответ на сообщение
        reply = cmd.params.replyToMsg
        if not reply:
            cmd.answer("Ответьте на сообщение, которое нужно подписать.")
            return HookResult(strategy=HookStrategy.CANCEL)

        # 1. Получаем текст и entities из сообщения
        original_text = reply.messageOwner.message
        original_entities = list(reply.messageOwner.entities.toArray())

        # 2. Конвертируем их в удобный HTML
        html_text = self.utils.HTML.unparse(original_text, original_entities)

        # 3. Добавляем свою подпись
        signed_html = html_text + "\n\n✍️ <i>Подписано крутым кактусом</i>"

        # 4. Отправляем новое сообщение, CactusLib автоматически его распарсит
        cmd.answer(signed_html)

        return HookResult(strategy=HookResult.CANCEL)
Как это работает: Вместо того чтобы работать со сложными entities, мы конвертируем их в простой HTML, дописываем что нужно, а затем cmd.answer (который по умолчанию использует HTML-парсер) делает всю работу по обратной конвертации.
2. Создание сообщения с форматированием из кода
whois.plugin
class MyPlugin(CactusUtils.Plugin):
    @command(doc="Показывает информацию о пользователе")
    def whois(self, cmd: CactusUtils.Command):
        # Предположим, мы получили данные пользователя
        user_id = 12345
        user_name = "John Doe"
        user_premium = True

        # Собираем HTML-строку
        text = f"<b>Информация о пользователе:</b>\n"
        text += f" • <b>ID:</b> <code>{user_id}</code>\n"
        text += f" • <b>Имя:</b> {self.utils.escape_html(user_name)}\n"
        if user_premium:
            # <emoji> - премиум-эмодзи
            text += " • <b>Статус:</b> <emoji id=5807614228864962198>👑</emoji> Premium"

        # Просто отправляем собранную строку
        cmd.answer(text)
        return HookResult(strategy=HookStrategy.CANCEL)

3. Просмотр форматированного текста от пользователя и добавление к нему текста
appendtext.plugin
class MyPlugin(CactusUtils.Plugin):
    @command(doc="Добавляет подпись к вашему сообщению")
    def append(self, cmd: CactusUtils.Command):
        # Получаем текст и entities из "отправляемого" сообщения
        html_text = cmd.html()

        html_text += "\n\n✍️ <i>Подписано крутым кактусом</i>"

        # Просто отправляем измененную строку
        cmd.answer(html_text)
        return HookResult(strategy=HookStrategy.CANCEL)