Skip to content

Attachments

Описание принципов работы с прикреплениями

Описание типов

Attachment API Reference [EN]ExternalAttachment API Reference [EN]

Концепция

Есть два базовых класса для работы с прикреплениями:

ts
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, он автоматический вёрнёт данный формат.

ts
attachment.toString(); // photo100_1
// Или
String(attachment); // photo100_1

Это так же будет работать с массивами при приведении их к строке

ts
[attachment, 'doc100_5'].toString(); // photo100_1,doc100_5
// Или
String([attachment, 'doc100_5']); // photo100_1,doc100_5

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

ts
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();

Получение прикрепления из строки

ts
Attachment.fromString('photo100_1'); // => Attachment<photo, 100, 1>

Можно ли прикрепить

ts
attachment.canBeAttached(); // => boolean

Сравнение двух прикреплений

ts
attachment1.equals(attachment2); // => boolean
// Или
attachment1.equals('photo100_1'); // => boolean

Полные ли данные содержит прикрепление

ts
attachment.isFilled(); // => boolean

Сериализация прикрепления

ts
JSON.stringify(attachment); // => object