Skip to main content
CactusLib позволяет создавать специальные ссылки вида tg://cactus/..., которые могут выполнять действия внутри приложения. Это мощный инструмент для создания кастомных взаимодействий. Существует два типа URI и, соответственно, два декоратора для них.

1. @uri: Глобальные URI

Эти ссылки обрабатываются глобально, когда пользователь пытается их открыть (например, при клике в описании профиля).
  • Декоратор: @uri("my_action")
  • Формат ссылки: tg://cactus/{plugin_id}/my_action?arg1=value1
  • Функция-обработчик: Принимает аргументы, указанные в URI, как именованные параметры.
Пример: URI, который показывает bulletin
Если пользователь перейдет по сгенерированной ссылке, на экране появится уведомление Уведомление от Admin: Hello from URI!.

2. @message_uri: URI внутри сообщений

Это особый тип URI, который работает только внутри сообщений Telegram. Вместо открытия ссылки, он вызывает вашу функцию, передавая ей контекст сообщения. Это похоже на инлайн-кнопки, но в виде обычных текстовых ссылок.
  • Декоратор: @message_uri("my_message_action")
  • Формат ссылки: tg://cactusX/{plugin_id}/my_message_action?arg1=value1 (Обратите внимание на cactusX)
  • Функция-обработчик: Первым аргументом принимает объект CactusUtils.UriCallback, а затем именованные параметры из URI.

Объект CactusUtils.UriCallback

Атрибуты

MessageObject
Объект сообщения, в котором нажали на ссылку.
ChatMessageCell
UI-элемент сообщения.
func
Редактирует сообщение. Альтернатива CactusUtils.edit_message(cb.message, text, fragment=get_last_fragment(), **kwargs)
func
Редактирует Inline-клавиатуру или удаляет её вовсе.
func
Удаляет сообщение.

Пример: интерактивная ссылка в сообщении

counter.plugin
Как это работает:
  1. Пользователь пишет .link_counter.
  2. Плагин отправляет сообщение со ссылкой, ведущей на tg://cactusX/....
  3. При нажатии на ссылку Exteragram не открывает ее, а вызывает метод _on_update_count.
  4. Метод обновляет счетчик и редактирует исходное сообщение, подставляя новое значение и новую ссылку. Создается эффект интерактивного сообщения.