К содержанию
Общее · Разработчикам

Разработка, публикация и проверка Lovsel

Тестовая копия без модерации, сборки, публикация в магазине и отметка «Проверен Lovsel».

Содержание

Плагин не нужно отправлять на модерацию, чтобы попробовать его. Вы загружаете файл, и плагин сразу работает у вас. Обновлять его можно сколько угодно раз. Когда плагин готов, вы сами публикуете его в магазине бесплатно или по своей цене, а Lovsel проверяет выпущенную сборку и ставит отметку «Проверен Lovsel».

Как написать сам плагин, рассказано в статьях «Как создать плагин» и «Компоненты интерфейса SDK».

Путь плагина

  1. Загрузите файл. «Плагины → Разработчикам → Создать плагин»: перетащите .py-файл в область «Файл плагина» (или нажмите «Выбрать файл») и, когда проверка пройдена, — «Создать и тестировать у себя». Плагин сразу появляется в вашем меню и работает с вашим магазином. Это тестовая копия: её видите только вы.
  2. Проверяйте и исправляйте. Откройте плагин и проверьте интерфейс, кнопки и реальную работу с площадкой. Нашли проблему — исправьте файл и перетащите его во вкладку «Разработка»: новая сборка сразу заменит тестовую копию, и можно проверять снова.
  3. Опубликуйте. Кнопка «Опубликовать»: бесплатно или по своей цене. Плагин появляется в магазине, а выпущенная сборка уходит на проверку Lovsel.
  4. Получите отметку. Администратор проверяет сборку и ставит отметку «Проверен Lovsel». Если проверка не пройдена, вы увидите причину в кабинете разработчика и в центре событий.

Панель разработчика

«Плагины → Разработчикам» — три главных действия:

  • Создать плагин — загрузка файла и карточка для каталога;
  • Мои плагины — список ваших плагинов: версия, статус («В разработке», «Опубликован», «Ждёт проверки», «Проверка не пройдена», «Скрыт»), установки и продажи. У каждого плагина — «Обновить» (загрузить новую версию), «Настройки» (карточка в каталоге) и «Открыть»;
  • Документация — это руководство, «Как создать плагин» и «Компоненты интерфейса SDK».

Короткие правила — в блоке «Правила публикации» справа.

Загрузка файла

Файл плагина можно просто перетащить в любую часть области загрузки — она подсветится, отпустите файл. Кнопка «Выбрать файл» тоже работает. Подходит один .py-файл до 2 МБ в кодировке UTF-8; файл другого типа или больше 2 МБ кабинет не примет и сразу скажет почему.

После загрузки под областью видны название и размер файла и результат проверки. Код при проверке не запускается: сервер читает манифест и разбирает код.

  • Проверка пройдена — показаны название, версия, площадки, тип интерфейса и разрешения из MANIFEST, а также «Быстрая проверка кода» — те же замечания, которые увидит администратор при проверке Lovsel (сеть без разрешения network, eval/exec, вызовы SDK без нужного разрешения и т. п.). Замечания не мешают создать плагин, но их лучше исправить до публикации.
  • Не прошёл проверку — все причины списком: синтаксическая ошибка с номером строки, нет точки входа (app = WebPlugin(...) или register(ctx)), неверный формат версии, неизвестные разрешения или площадки. Исправьте файл и перетащите его снова.

Разработка без модерации

Вкладка «Разработка» кабинета разработчика («Плагины → Разработчикам» → ваш плагин) устроена для короткого цикла: загрузил — открыл — проверил — исправил — загрузил снова.

  • Тестовая копия работает только у вас, пока у вас активна подписка Lovsel. Кнопка «Открыть плагин» ведёт на его страницу. Там видна плашка «Это ваш плагин» с настоящим состоянием: в разработке, у вас та же версия, что у покупателей, или у вас новая невыпущенная сборка — и статус проверки Lovsel.
  • Загрузить сборку («Загрузить новую версию») — перетащите .py-файл в область загрузки или нажмите «Загрузить новую версию». Файл проверяется так же, как при создании; под областью появятся название файла, итог («Проверка пройдена», «Не запустилась» или «Не загружена» со списком причин) и быстрая проверка кода. Номер версии берётся из MANIFEST["version"]; пока плагин не выпущен, номер можно не менять. Лимита на число загрузок нет: ограничение в 120 загрузок в час только защищает сервер от сбоя в скрипте.
  • Перезапустить — перезагрузить тестовую копию, например после изменения настроек.
  • Изображения — баннеры, превью и картинки для инструкций внутри плагина. В коде на них ссылаются через ui.asset("имя.png") — см. «Изображения».

Если плагин не загрузился (синтаксическая ошибка, исключение при запуске), в кабинете появится текст ошибки и строка файла, где она случилась («Где ошибка»):

Строка 42, on_new_order: share = total / count
ZeroDivisionError: division by zero

Ошибки страниц, действий и обработчиков событий пишутся в журнал самого плагина — пункт «Журнал» в его меню, с трассировкой до строки вашего файла. Исправьте файл и загрузите сборку ещё раз.

Хранится одна сборка. Новая сборка заменяет предыдущую — старый файл удаляется, чтобы не занимать место. Lovsel хранит файлы только последней сборки (она работает у вас) и версии у покупателей. Прошлые версии остаются во вкладке «Версии» строкой истории: номер («первая версия», «4-е обновление»), дата выпуска и «что нового». Храните исходники у себя — например, в git.

Администратор может выключить «Собственные плагины пользователей». Тогда у разработчиков работают только проверенные Lovsel сборки: новую сборку можно загрузить, но заработает она после проверки.

Публикация

Кнопка «Опубликовать» в кабинете разработчика:

  • Бесплатно или своя цена — форма сразу покажет комиссию Lovsel и ваш доход с одной продажи;
  • Что нового — короткое описание версии для покупателей.

После публикации плагин сразу появляется в магазине, а сборка ждёт проверки Lovsel. До проверки на карточке написано «На проверке Lovsel».

Если администратор выключил настройку «Публикация без предварительной проверки» (то есть включил проверку перед публикацией), плагин появится в магазине после отметки «Проверен Lovsel». Пока он ждёт, в кабинете разработчика видно «Ждёт проверки Lovsel».

Карточку — название, описания, категорию, иконку, изображения, площадки, цену — можно менять во вкладке «Карточка» в любой момент.

Автор плагина в магазине — ник вашего аккаунта, вручную его не задают: смените ник в «Настройки → Профиль», и он сразу обновится во всех карточках. В шапке карточки показывается ваша картинка профиля. Иконка плагина — только своя картинка (до 150 КБ); если её нет, в карточке показывается логотип площадки плагина — GGsel, FunPay или Playerok.

Снять — убрать плагин из магазина: новые покупки станут недоступны, купившие продолжат им пользоваться. Удалить — убрать из каталога навсегда. Если плагин уже покупали, он отключится у покупателей (они получат уведомление), а история продаж сохранится.

Обновления

  1. Увеличьте version в MANIFEST (например, 1.0.0 → 1.1.0).
  2. Загрузите сборку: «Мои плагины» → «Обновить» и перетащите файл. Она сразу заработает у вас, а покупатели продолжат пользоваться выпущенной версией. Если номер больше выпущенного, в результате загрузки появится кнопка «Выпустить v1.1.0»; если нет — подсказка увеличить MANIFEST["version"].
  3. Проверьте её в своём магазине и нажмите «Выпустить v1.1.0», опишите изменения.
  4. Покупатели сразу получают обновление, изменения появляются в «Что нового», а сборка уходит на проверку Lovsel. Файл прошлой версии удаляется; во вкладке «Версии» остаётся запись об обновлении.

Отметка «Проверен Lovsel» ставится на конкретную сборку. Новая версия получает её после проверки. Если файл не изменился, отметка переносится автоматически. Если включена проверка перед публикацией, обновление дойдёт до покупателей после отметки.

Номер новой версии должен быть больше выпущенной. Не переименовывайте ключи ctx.storage и настроек без перевода старых данных — пример миграции есть в руководстве «Как создать плагин».

Отметка «Проверен Lovsel»

Статус на карточкеЧто значит
Плагин LovselОфициальный плагин платформы.
Проверен LovselВыпущенную сборку проверил администратор Lovsel.
На проверке LovselСборка ждёт проверки.
Не проверен LovselСборку ещё не проверяли, проверка не пройдена или отметку сняли.

Что смотрит администратор:

  • код сборки и находки быстрой проверки — запуск программ, сеть без разрешения network, чтение файлов и переменных окружения сервиса, eval/exec, закодированные строки, обращение к внутренностям Lovsel в обход SDK;
  • разрешения — объявлено только то, что нужно, и всё, что использует код. Если плагин объявил marketplace.api («Полный доступ к API площадки»), проверка отмечает его прямые запросы к API площадки, и администратор смотрит, какие методы он вызывает и зачем;
  • изменения с прошлой проверенной сборки, пока её файл хранится; после выпуска обновления файл прошлой версии удаляется, и администратор проверяет весь код новой.

Если проверка не пройдена, причина видна в кабинете разработчика и приходит в центр событий. Плагин остаётся в магазине без отметки (при проверке перед публикацией — не появляется в нём). Исправьте замечания и выпустите новую версию — она уйдёт на проверку сама. Повторно запросить проверку той же сборки можно кнопкой «Запросить проверку» — не чаще трёх раз в сутки.

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

Что видит покупатель

  • Плагин стоит в каталоге своей площадки: каждый плагин работает с одной площадкой — GGsel, FunPay или Playerok, и каталог плагинов у каждой площадки свой.
  • На карточке в магазине — статус проверки, автор, площадка и разрешения. Разрешение «Полный доступ к API площадки» (marketplace.api) значит, что плагин может выполнять от имени магазина любые действия, которые разрешает API площадки, — так покупатель видит это до покупки. Перед покупкой плагина стороннего разработчика всегда показывается предупреждение: «Покупайте и устанавливайте плагины только у проверенных разработчиков. Проверяйте автора, разрешения и статус проверки Lovsel.» У официальных плагинов Lovsel его нет — их делает команда Lovsel.
  • Фильтр «Проверенные Lovsel» в магазине.
  • Сколько плагинов автора в магазине и сколько из них проверено Lovsel.

Безопасность

Плагин выполняется на сервере Lovsel вместе с магазином продавца. Проверка Lovsel снижает риск, но не делает чужой код безопасным автоматически, поэтому:

  • плагин работает с магазином только через SDK: ctx.ggsel, ctx.funpay, ctx.playerok, ctx.storage, ctx.notify, ctx.download. Всё, что разрешает API площадки, доступно через SDK — готовыми методами или прямыми запросами (marketplace.api), поэтому обходить SDK незачем;
  • ключи площадок плагин не получает: Lovsel хранит их на сервере и сам подставляет в запросы плагина;
  • нельзя читать файлы и настройки сервиса, переменные окружения, данные других пользователей, запускать программы и прятать код;
  • запросы в интернет — только с разрешением network (удобнее всего через ctx.http), и покупатель видит его до покупки;
  • ключи и пароли пользователя — только в полях secret настроек, не в журнале и не на страницах.

Нарушение этих правил — причина снять отметку и заблокировать плагин.

Деньги

При каждой продаже доход (цена минус комиссия Lovsel) зачисляется на ваш баланс Lovsel. Продажа видна в истории баланса и во вкладке «Продажи». Снятие с публикации не отнимает плагин у купивших.

Чек-лист перед публикацией

  • MANIFEST заполнен, версия в формате 1.0.0, id уникален.
  • Объявлены все используемые разрешения и только они; marketplace.api — если плагин делает прямые запросы к API площадки. В marketplace — одна площадка, с которой плагин работает: ggsel, funpay или playerok.
  • Действия, которые меняют магазин или тратят деньги (возврат, удаление, платная публикация, прямые запросы с изменениями), спрашивают подтверждение продавца.
  • python -m lovsel_sdk.testing plugin.py проходит без ошибок.
  • Тестовая копия проверена в своём магазине: на телефоне и в тёмной теме.
  • Во вкладке «Разработка» нет ошибки загрузки, а в журнале плагина — ошибок страниц и действий.
  • Картинки плагина загружены во вкладке «Разработка → Изображения» и открываются на телефоне.
  • Есть страница «Обзор», пустые состояния и понятные тексты ошибок.
  • Опасные действия спрашивают подтверждение, долгие — показывают прогресс.