tg://cactus/..., которые могут выполнять действия внутри приложения. Это мощный инструмент для создания кастомных взаимодействий.
Существует два типа URI и, соответственно, два декоратора для них.
1. @uri: Глобальные URI
Эти ссылки обрабатываются глобально, когда пользователь пытается их открыть (например, при клике в описании профиля).
- Декоратор:
@uri("my_action") - Формат ссылки:
tg://cactus/{plugin_id}/my_action?arg1=value1 - Функция-обработчик: Принимает аргументы, указанные в URI, как именованные параметры.
Уведомление от 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
Атрибуты
Объект сообщения, в котором нажали на ссылку.
UI-элемент сообщения.
Редактирует сообщение. Альтернатива
CactusUtils.edit_message(cb.message, text, fragment=get_last_fragment(), **kwargs)Редактирует Inline-клавиатуру или удаляет её вовсе.
Удаляет сообщение.
Пример: интерактивная ссылка в сообщении
counter.plugin
- Пользователь пишет
.link_counter. - Плагин отправляет сообщение со ссылкой, ведущей на
tg://cactusX/.... - При нажатии на ссылку Exteragram не открывает ее, а вызывает метод
_on_update_count. - Метод обновляет счетчик и редактирует исходное сообщение, подставляя новое значение и новую ссылку. Создается эффект интерактивного сообщения.