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

События

Подписывайтесь на объявленные события и учитывайте их контекст и время жизни.

Подписка

api.events.on(name, handler) возвращает асинхронный Disposable. Данные события передаются в ограниченном конверте.

const subscription = await api.events.on("locale.changed", async event => {
  const environment = await api.environment.get();
  const locale = environment.locale;
});

Конверт

interface PluginEvent {
  readonly id: string;
  readonly timestamp: number;
  readonly version: 1;
  readonly data: JSONValue;
}

timestamp измеряется в секундах. При необходимости используйте id, чтобы не обрабатывать одно и то же действие повторно.

Известные имена

  • plugin.activated
  • account.contextChanged
  • app.foreground
  • theme.changed
  • locale.changed
  • chat.opened и chat.closed
  • composer.changed
  • message.observed

Часть payload требует соответствующих read-возможностей. Наличие события в типах не гарантирует активный нативный источник во всех сборках и контекстах.

Чего событие не даёт

Уведомление не создаёт новое действие пользователя и не предоставляет новых разрешений. Нельзя из theme.changed получить приватный черновик, если операция требует нативного жеста.

Ошибки и остановка

Обрабатывайте ожидаемые отказы внутри своего callback. Пять отклонённых событий подряд останавливают выполнение плагина. Не рассчитывайте на plugin.deactivating или надёжную доставку последнего события перед остановкой: такие обещания в SDK отсутствуют.

Отписаться

await subscription.dispose();

Не сохраняйте Disposable в постоянное хранилище. При новом запуске создайте подписки заново.