Attachments
Описание принципов работы с прикреплениями
Описание типов
Attachment API Reference [EN]ExternalAttachment API Reference [EN]
Концепция
Есть два базовых класса для работы с прикреплениями:
- Attachment — основной класс, может быть прикреплением
attachment1234_1234_1234
- ExternalAttachment второстепенный класс, без возможности прикрепления. Обычно можно получить только с самого ВКонтакте API.
const attachment = new Attachment({
// api,
type: 'photo',
payload: {
id: 1,
owner_id: 100,
// access_key: 'accessKey'
}
});
// attachment.isFilled(); // => false
Формат прикреплений ВКонтакте очень простой: ${type}${ownerId}_${id}_${accessKey}
. В основном идёт работа без ключа доступа (_${accessKey}
), пример прикрепления фотографии с ID 1
, которая принадлежит пользователю с ID 100
(photo100_1
). Несколько прикреплений передаются через запятую photo100_1,doc100_5
.
Вы можете вручную получать такой формат, например для всех прикреплений ${attachment.type}${attachment.ownerId}_${attachment.id}
. Но это делать не нужно, так как у класса Attachment есть метод toString, он автоматический вёрнёт данный формат.
attachment.toString(); // photo100_1
// Или
String(attachment); // photo100_1
Это так же будет работать с массивами при приведении их к строке
[attachment, 'doc100_5'].toString(); // photo100_1,doc100_5
// Или
String([attachment, 'doc100_5']); // photo100_1,doc100_5
Помимо ручного преобразования, мы можем положиться на автоматическое приведение к строке в методах API
await api.messages.send({
peer_id: <peer_id>,
// Здесь будет photo100_1
attachment
// Ручное преобразование одного прикрепления
// attachment: attachment.toString()
// attachment: String(attachment)
// Ручное преобразование массива прикреплений
// attachment: [attachment].toString()
// attachment: String([attachment])
});
// Можно передавать так же в массиве
await api.messages.send({
peer_id: <peer_id>,
// Здесь будет photo100_1,doc100_5
attachment: [
attachment,
'doc100_5'
]
});
Внимание
Прикрепления могут содержать неполные данные, если например вы получаете их с User Long Poll. Проверить можно через attachment.isFilled();
Получение прикрепления из строки
Attachment.fromString('photo100_1'); // => Attachment<photo, 100, 1>
Можно ли прикрепить
attachment.canBeAttached(); // => boolean
Сравнение двух прикреплений
attachment1.equals(attachment2); // => boolean
// Или
attachment1.equals('photo100_1'); // => boolean
Полные ли данные содержит прикрепление
attachment.isFilled(); // => boolean
Сериализация прикрепления
JSON.stringify(attachment); // => object