Stepan_Tap
@Stepan_Tap
Python маслёнок, интересующийся IT и Digital Art

Как получить более трёх вложений из сообщения ВК API?

Используется библиотека 'vkbottle'

Требуется получить из сообщения в беседе ВКонтакте данные о вложениях.
При отправке 1-3 вложений всё получается без проблем, но отправляя 4 и более вложений, в message.attachments показывается только первое.

Есть какое-то ограничение на отправку вложений в VK API?
Или дело в vkbottle?

@bot.on.message()
async def message_handler(message: Message):
  if len(message.attachments) == 0:
    await api.messages.send(peer_id=message.peer_id, random_id = random.getrandbits(64), message = f"Здесь нет вложений")
  else:
    print('\n\n\n\n', len(message.attachments), '\n', message)
    await api.messages.send(peer_id=message.peer_id, random_id = random.getrandbits(64), message = f"В этом сообщении {len(message.attachments)} вложений")
    for attach in message.attachments:
      if attach.photo != None:
        await api.messages.send(peer_id=message.peer_id, random_id = random.getrandbits(64), message = f"Тут есть фото\n Owner: {attach.photo.owner_id}\n Id: {attach.photo.id}")
      elif attach.wall != None:
        await api.messages.send(peer_id=message.peer_id, random_id = random.getrandbits(64), message = f"Тут есть пост\n Owner: {attach.wall.owner_id}\n Id: {attach.wall.id}")
      elif attach.video != None:
        await api.messages.send(peer_id=message.peer_id, random_id = random.getrandbits(64), message = f"Тут есть видео\n Owner: {attach.video.owner_id}\n Id: {attach.video.id}")
  print(message)


640cb703c59be878995854.png

Параметры message из консоли при 3-х вложениях

640d8b74f3f53055922066.png

640cb747810c3061694449.png

Параметры message из консоли при 4-х и более вложениях

640d8b8059b8d718551155.png
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
@upconett
В vkbottle (по крайней мере в версии 4.4.0dev) есть функция
await message.get_full_message()
И эта функция подгружает все вложения в нужном сообщении!

Код ниже будет выводить строки для вложений всех фото в сообщении

@bl.message(attachment='photo')
async def on_photo(message: Message):
    ms = await message.get_full_message()
    atts = ms.get_attachment_strings()
    print(','.join(atts))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы