Donutgramплагины
На этой страницеAPI composer

Черновик сообщения

Прочитайте текущий черновик и замените выделение с проверкой версии.

API composer

Для чтения нужен composer.read / activeComposer, для замены — composer.transform / activeComposer. Операции используют текущий чат и явное действие пользователя.

Получить черновик

const draft = await api.composer.getActiveDraft();
if (!draft) return;

Результат содержит handle, непрозрачную строку revision, text, selection, entities, entitiesComplete и plainTextComplete.

interface TextRange {
  start: number;
  end: number;
}

Индексы выделения измеряются в UTF-16, как у JavaScript String.slice.

Заменить выделение

const draft = await api.composer.getActiveDraft();
if (!draft) return;

await api.composer.replaceSelection({
  composer: draft.handle,
  expectedRevision: draft.revision,
  range: draft.selection,
  text: "Мой шаблон"
});

Без range используется захваченное выделение. Это изменение локального поля ввода, а не отправка сообщения.

Защита от устаревших данных

Пользователь может изменить текст, чат или выделение между чтением и применением. Нативный адаптер сравнивает черновик перед записью. Не вычисляйте следующую revision самостоятельно и не повторяйте действие со старым handle.

Форматированный текст

Снимок не гарантирует полноту entities и структуры rich content. Не интерпретируйте пустой массив entities как доказательство безопасности замены сложного черновика. Адаптер может отказаться от изменения, если не способен сохранить нужную структуру.

Рабочий пример — templates, очищение ссылки — quiet-links из SDK.