@Verese

Как сделать файл, отправляемый пользователем, доступным для ВК–бота?

import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType

def main():
    vk_session = vk_api.VkApi(token='token')
    vk = vk_session.get_api()

for event in VkLongPoll(vk_session).listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me:
        if event.attachments:
            if event.attachments["attach1_type"] == "doc":
                document = event.attachments["attach1"]
                response = vk.docs.getById(docs=document)
                print(response)


При получении файла от пользователя получаю следующий словарь:
{"attach1_type": "doc", "attach1": "742288495_658873163"}
Когда пытаюсь получить больше информации о документе, используя `docs.getById`, то получаю пустой массив. Но если сначала загрузить файл в аккаунт, а потом отправить бота, то всё работает как надо. Возможно ли сделать так, чтобы бот сразу получал файл без необходимости загрузки его в свой профиль?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Вообще, для этого есть дополнительно поле access key
spoiler
644d556e2ebd5963989217.jpeg


В vk_api не приходит это поле в лонгполл, может так должно быть, может это упущение vk_api, но в любом случае, придется дернуть сообщение по его ID, и там уже будет и access key который можно добавить в запрос docs.getById, так и будет там url, по которому можно файл загрузить (не знаю для всех ли видов файлов есть url)

for event in VkLongPoll(vk_session).listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me:
        if event.attachments:
            if event.attachments["attach1_type"] == "doc":
                vk.messages.getById(message_ids=event.message_id)['items'][0]['attachments'][0]


Дальше уже от ваших нужд. Либо берете url из ответа и делаете с файлом ваши задачи, либо достаете accesskey и пробуете
document = event.attachments["attach1"] + '_' + access_key
response = vk.docs.getById(docs=document)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы