Donutgramплагины
На этой страницеРегистрация команды

Команды

Добавьте явное действие в настройки, меню чата или меню сообщения.

Регистрация команды

api.commands.register принимает описание действия и возвращает Promise с Disposable. Дождитесь регистрации внутри activate.

await api.commands.register({
  id: "hello",
  title: "Показать приветствие",
  placement: "composer",
  async run() {
    await api.ui.toast("Привет!");
  }
});

Манифест такой команды объявляет ui.contribute со scope composer.

Размещения

Placement Где пользователь найдёт команду
composer Долгое нажатие на аватар в шапке чата
chatToolbar То же меню команд текущего чата
selection Меню выбранного сообщения
messageMenu Меню сообщения
settings Настройки установленного плагина

Scope должен совпадать с размещением. Дополнительное чтение или изменение данных требует своих возможностей.

Контекст пользователя

Команда из нативного меню даёт текущий контекст действия, а не постоянный доступ к сообщениям или черновику. Запрашивайте нужные сведения внутри run, а не заранее в activate.

Отдельный обработчик

Допустимо передать обработчик вторым аргументом:

await api.commands.register(
  { id: "ready", title: "Проверить", placement: "settings" },
  async () => { await api.ui.toast("Готово"); }
);

Убрать команду

const registration = await api.commands.register({
  id: "temporary",
  title: "Временная команда",
  placement: "settings",
  async run() {}
});

await registration.dispose();

При остановке runtime принадлежащие ему команды также освобождаются хостом. Не создавайте одинаковую регистрацию при каждом событии.