Достаём присланные картинки в хорошем качестве
Важные ограничения ВК
Когда игрок присылает картинку в сообщения сообщества — она загружается в его скрытый альбом.
Нашему боту недоступна эта картинка, поэтому её нельзя переслать в сообщении другому человеку или в чат. Исключение: картинка от того, кто создал ключ доступа сообщества.
В ВК есть ссылки на картинку в оригинальном формате и в пропорциональных копиях («сжатые»). Но эта информация приходит всегда в разном виде.
Задача команды
Это команда для сбора картинок от подписчиков в одном месте. Самый яркий пример: подписчики — школьники, которые присылают домашнюю работу, а админы — несколько (или много) человек, которые будут её проверять
- Мы можем получить ссылку на картинку в максимальном разрешении. И затем переслать сотрудникам.
- Не получится прикрепить картинку к пересылаемому сообщению.
- Можно собирать ссылки (например, в гугл-таблицу), а потом скачать их одни кликом через пакетный загрузчик, типа Download Master.
ВАЖНЫЕ ОСОБЕННОСТИ
Настройка зависит от того, какая версия сервера Callback API VK установлена в вашем сообществе — этот сервер отправляет Автопилоту запросы о том, что игрок совершил такое-то событие. Ниже рассмотрим настройку для двух ситуаций:
- если версия Callback API ниже 5.103 (т.е. до 5.102 включительно)
- если версия Callback API от 5.103 включительно
Перед настройкой обязательно проверьте вашу версию. Для этого:
— в Автопилоте зайдите в раздел «Сообщества»
— напротив нужного сообщества — Настройки
— вкладка «Настройки подключения»
— ссылка «Открыть настройки Callback API в VK»

Структура команды
Важно: такая обработка возможна только для одной картинки. Ниже рассмотрим для первой присланной.
Суть: Получаем входящую информацию от ВК в переменной %request% — это JSON-объект. В нём берём первые 7 субобъектов по адресу attachments.0.sizes.
Сначала будем искать субобъект, отвечающий максимальному разрешению картинки, т.е. в следующем порядке: type = w > z > y > x > m > s. Это значит, что если найден субобъект с type = w (максимальное разрешение) — берём его и прекращаем поиск, если нет — ищем следующий с type = z (разрешение меньше) и т.п.
Далее надо определить номер субобъекта с нужным качеством, чтобы его взять из массива.
Событие: Написал сообщение
Можно реагировать только на сообщение с картинкой, тогда в событии выбираем флаг «с картинкой».

А можно присылать ругачку, когда игрок пишет ключевик, но картинку не прислал.
Временная переменная %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%

- Если версия 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}
во всех остальных случаях

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

Отправить сообщение — собственно выслать ссылку на картинку.
В текст вставляем следующую функцию. (Для опытных: она обратится в массив и достанет ссылку из субоъекта с правильным номером.)
- Если версия Callback API ниже 5.103
{get_var}input.attachments.0.photo.sizes.%max_size_num%.url|json|%request%{/get_var}

- Если версия Callback API от 5.103
{get_var}input.message.attachments.0.photo.sizes.%max_size_num%.url|json|%request%{/get_var}
Примечание. На момент написания инструкции нельзя доставать ссылку через %request…%
, потому что в неё нельзя записывать другие переменные.
Всё!
Пример работы
