Достаём присланные картинки в хорошем качестве

Важные ограничения ВК

Когда игрок присылает картинку в сообщения сообщества — она загружается в его скрытый альбом.

Нашему боту недоступна эта картинка, поэтому её нельзя переслать в сообщении другому человеку или в чат. Исключение: картинка от того, кто создал ключ доступа сообщества.

В ВК есть ссылки на картинку в оригинальном формате и в пропорциональных копиях («сжатые»). Но эта информация приходит всегда в разном виде.

Задача команды

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

  • Мы можем получить ссылку на картинку в максимальном разрешении. И затем переслать сотрудникам.
  • Не получится прикрепить картинку к пересылаемому сообщению.
  • Можно собирать ссылки (например, в гугл-таблицу), а потом скачать их одни кликом через пакетный загрузчик, типа Download Master.

ВАЖНЫЕ ОСОБЕННОСТИ

Настройка зависит от того, какая версия сервера Callback API VK установлена в вашем сообществе — этот сервер отправляет Автопилоту запросы о том, что игрок совершил такое-то событие. Ниже рассмотрим настройку для двух ситуаций:

  • если версия Callback API ниже 5.103 (т.е. до 5.102 включительно)
  • если версия Callback API от 5.103 включительно

Перед настройкой обязательно проверьте вашу версию. Для этого:

— в Автопилоте зайдите в раздел «Сообщества»
— напротив нужного сообщества — Настройки
— вкладка «Настройки подключения»
— ссылка «Открыть настройки Callback API в VK»

Достаём присланные картинки в хорошем качестве, image #1

Структура команды

Важно: такая обработка возможна только для одной картинки. Ниже рассмотрим для первой присланной.

Суть: Получаем входящую информацию от ВК в переменной %request% — это JSON-объект. В нём берём первые 7 субобъектов по адресу attachments.0.sizes.

Сначала будем искать субобъект, отвечающий максимальному разрешению картинки, т.е. в следующем порядке: type = w > z > y > x > m > s. Это значит, что если найден субобъект с type = w (максимальное разрешение) — берём его и прекращаем поиск, если нет — ищем следующий с type = z (разрешение меньше) и т.п.

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

Событие: Написал сообщение

Можно реагировать только на сообщение с картинкой, тогда в событии выбираем флаг «с картинкой».

Достаём присланные картинки в хорошем качестве, image #2

А можно присылать ругачку, когда игрок пишет ключевик, но картинку не прислал.

Временная переменная %sizes% — парсим JSON-объект. На выходе должно получиться массив (набор знаков через запятую) вида s,m,x,y,z,w,o. Порядок и тип букв может меняться. Просто копируем текст ниже.

  • Если версия Callback API ниже 5.103

%request.input.attachments.0.photo.sizes.0.type%,%request.input.attachments.0.photo.sizes.1.type%,%request.input.attachments.0.photo.sizes.2.type%,%request.input.attachments.0.photo.sizes.3.type%,%request.input.attachments.0.photo.sizes.4.type%,%request.input.attachments.0.photo.sizes.5.type%,%request.input.attachments.0.photo.sizes.6.type%

Достаём присланные картинки в хорошем качестве, image #3
  • Если версия Callback API от 5.103

%request.input.message.attachments.0.photo.sizes.0.type%,%request.input.message.attachments.0.photo.sizes.1.type%,%request.input.message.attachments.0.photo.sizes.2.type%,%request.input.message.attachments.0.photo.sizes.3.type%,%request.input.message.attachments.0.photo.sizes.4.type%,%request.input.message.attachments.0.photo.sizes.5.type%,%request.input.message.attachments.0.photo.sizes.6.type%

Временная условная переменная %max_size_num% — запишем в неё номер элемента, соответствующего наибольшему разрешению. Порядок проверки элементов: w > z > y > x > m > s.

  • {array}%sizes%|w|num{/array}, если числовая переменная {array}%sizes%|w|num{/array} больше 0
  • {array}%sizes%|z|num{/array}, если числовая переменная {array}%sizes%|z|num{/array} больше 0
  • {array}%sizes%|y|num{/array}, если числовая переменная {array}%sizes%|y|num{/array} больше 0
  • {array}%sizes%|x|num{/array}, если числовая переменная {array}%sizes%|x|num{/array} больше 0
  • {array}%sizes%|m|num{/array}, если числовая переменная {array}%sizes%|m|num{/array} больше 0
  • {array}%sizes%|s|num{/array} во всех остальных случаях
Достаём присланные картинки в хорошем качестве, image #4

Временная переменная %max_size_num% = {math}%max_size_num%-1{/math}

В предыдущем действии получили номер субобъекта, отсчитанный от 1. А чтобы получить субобъект из неассоциативного массива по номеру, этот номер нужно отсчитывать от 0. Поэтому уменьшаем предыдущую переменную на 1.

Достаём присланные картинки в хорошем качестве, image #5

Отправить сообщение — собственно выслать ссылку на картинку.

В текст вставляем следующую функцию. (Для опытных: она обратится в массив и достанет ссылку из субоъекта с правильным номером.)

  • Если версия Callback API ниже 5.103

{get_var}input.attachments.0.photo.sizes.%max_size_num%.url|json|%request%{/get_var}

Достаём присланные картинки в хорошем качестве, image #6
  • Если версия Callback API от 5.103

{get_var}input.message.attachments.0.photo.sizes.%max_size_num%.url|json|%request%{/get_var}

Примечание. На момент написания инструкции нельзя доставать ссылку через %request…%, потому что в неё нельзя записывать другие переменные.

Всё!

Пример работы

Достаём присланные картинки в хорошем качестве, image #7
Вернуться на главную страницу инструкций
1527 views·22 shares