Use this file to discover all available pages before exploring further.
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)