Как переотправлять картинки, отправленные боту в личные сообщения [VK]?

Ссылка скопирована
1 ответ

Добрый день.
Нужно сделать так, чтобы бот отправлял, например в чат X, картинки, которые пользователь Y написал в личные сообщения сообщества.

Если сделать вот так:

if (message.isChat) return      const messageAttachments = message.attachments;      messageAttachments.forEach(element => {         console.log(element)     })

if (message.isChat) return const messageAttachments = message.attachments; messageAttachments.forEach(element => { console.log(element) })

То будет возвращен объект класса PhotoAttachment, accessToken которого: undefiend

Как переотправлять картинки, отправленные боту в личные сообщения [VK]?

Как сделать такой функционал?

  • NodeJS: v21.6.1
    VK-IO: 4.9.1
    Token: сообщество

Дополнительно:

Не особо сильно шарю за API VK, но можно предположить, что если есть объект такого класса, который содержит в себе такие свойства, которые явно не обозначены - то может есть какой-то хук, который именно по потребности возвращает картинку по id? Тем более, я так подозреваю что в первой закраске содержится что-то типа photo57643xx_456242xxx. Если так, то он тебе описывает то, что ты можешь получить, потому что VK это VK, и просто так, пустой объект с одним id он тебе не создаст, значит есть какой-то последующий хук, который может забрать этот аттач.

Ответы:

Стоит перезагрузить сообщения с API ВКонтакте:
await context.loadMessagePayload({ force: true });

Будет полный объект сообщения, вместе с access_key в прикреплениях. Cоотвественно прикрепление можно прикрепить преобразовав его к строке attachment.toString() на выходе будет формат ВКонтакте.

Альтернативный вариант — просто перезалить фотографии.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Для переотправки картинок, отправленных боту в личные сообщения VK, вам потребуется использовать API VK. Ниже приведен пример кода на PHP, который демонстрирует этот процесс:

// Получаем токен доступа и ID пользователя
$token = 'YOUR_ACCESS_TOKEN';
$user_id = 'USER_ID';
 
// Получаем список вложений в сообщении
$request_params = array(
    'access_token' => $token,
    'user_id' => $user_id,
    'v' => '5.131'
);
$get_attachments = file_get_contents('https://api.vk.com/method/messages.getHistoryAttachments?' . http_build_query($request_params));
$attachments = json_decode($get_attachments, true);
 
// Переотправляем картинки
foreach ($attachments['response']['items'] as $item) {
    if ($item['attachment']['type'] == 'photo') {
        $photo = $item['attachment']['photo'];
        $photo_url = end($photo);
 
        $request_params = array(
            'access_token' => $token,
            'user_id' => $user_id,
            'attachment' => $photo_url,
            'v' => '5.131'
        );
        file_get_contents('https://api.vk.com/method/messages.send?' . http_build_query($request_params));
    }
}

// Получаем токен доступа и ID пользователя $token = 'YOUR_ACCESS_TOKEN'; $user_id = 'USER_ID'; // Получаем список вложений в сообщении $request_params = array( 'access_token' => $token, 'user_id' => $user_id, 'v' => '5.131' ); $get_attachments = file_get_contents('https://api.vk.com/method/messages.getHistoryAttachments?' . http_build_query($request_params)); $attachments = json_decode($get_attachments, true); // Переотправляем картинки foreach ($attachments['response']['items'] as $item) { if ($item['attachment']['type'] == 'photo') { $photo = $item['attachment']['photo']; $photo_url = end($photo); $request_params = array( 'access_token' => $token, 'user_id' => $user_id, 'attachment' => $photo_url, 'v' => '5.131' ); file_get_contents('https://api.vk.com/method/messages.send?' . http_build_query($request_params)); } }

В этом коде мы сначала получаем список вложений в личных сообщениях боту с помощью метода `messages.getHistoryAttachments`. Затем мы проверяем каждое вложение и если это фотография, переотправляем ее с помощью метода `messages.send`.

Убедитесь, что у вас есть доступ к API VK и права на отправку сообщений пользователю. Также не забудьте заменить `YOUR_ACCESS_TOKEN` на ваш токен доступа и `USER_ID` на ID пользователя, которому вы хотите переслать картинки.

Надеюсь, этот ответ поможет вам решить вашу проблему с пересылкой картинок в личных сообщениях VK через бота. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

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

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно