Donutgramплагины
На этой страницеОт команды к сообщению

Первый плагин

Создайте команду .hello, которая заменяет текст перед отправкой.

От команды к сообщению

Сделаем плагин: пользователь пишет .hello Алиса, а собеседнику приходит Привет, Алиса!. Текст приветствия можно изменить в настройках.

Создать проект

python tools/dgplugin.py create hello --id dev.example.hello

Описать плагин

Замените hello/manifest.json следующим содержимым. Разрешение относится только к изменению текста перед отправкой; сетевой доступ этому плагину не нужен.

{
  "kind": "donutgram.plugin",
  "schemaVersion": 1,
  "id": "dev.example.hello",
  "name": "Приветствие",
  "version": "1.0.0",
  "description": "Превращает .hello имя в приветствие",
  "author": { "name": "Ваше имя" },
  "apiVersion": "^1.0.0",
  "minClientVersion": "13.2",
  "entry": "main.js",
  "profile": "localPrivate",
  "permissions": [
    {
      "capability": "messages.intercept",
      "scope": "activeComposer",
      "reason": "Заменять команду .hello перед отправкой"
    }
  ],
  "settingsSchema": {
    "type": "object",
    "properties": {
      "greeting": {
        "type": "string",
        "title": "Приветствие",
        "default": "Привет",
        "maxLength": 80
      }
    }
  }
}

Написать обработчик

Поместите этот код в hello/main.js. Маркер в первой строке обязателен.

const _plugin = "donutgram";

export default definePlugin({
  async activate(api) {
    await api.messages.beforeSend({ id: "hello" }, async input => {
      const match = /^\.hello(?:\s+(.+))?$/.exec(input.text.trim());
      if (!match) return {};
      const name = match[1]?.trim();
      if (!name) return { cancel: true };
      const settings = await api.settings.get();
      const greeting = settings.greeting || "Привет";
      return { text: `${greeting}, ${name}!` };
    });
  }
});

Пустой объект оставляет сообщение без изменений. { text } заменяет его текст, а { cancel: true } останавливает отправку и сохраняет черновик.

Проверить и собрать

python tools/dgplugin.py validate hello
python tools/dgplugin.py pack hello hello.dgplugin
python tools/dgplugin.py validate hello.dgplugin

Установить

Отправьте hello.dgplugin документом в избранное. Откройте его в Donutgram, оставьте «Включить после установки» включённым и нажмите «Установить».

Напишите .hello Алиса. Затем откройте настройки плагина и измените приветствие. Обычные сообщения плагин не трогает.

Частые ошибки

  • Маркер отсутствует или стоит после исполняемого кода.
  • В permissions нет messages.intercept / activeComposer.
  • В приложении выключен общий переключатель плагинов.
  • Внутрь архива упакована папка hello, а не её содержимое.

Используйте CLI pack: он сам создаёт правильную структуру архива.