Найти - Пользователи
Полная версия: vk_api отправка файла личным сообщением сообщества
Начало » Python для новичков » vk_api отправка файла личным сообщением сообщества
1
snowbars152
Добрый день, Коллеги!
Потребовалось написать бота для ВКонтате для общения и рассылки заданий студентам. Использую библиотеку vk_api. Как организовать общение - я разобрался, а вот как переслать задание в виде Word'овского файла - у меня не получается, пишет: vk_api.exceptions.ApiError: User authorization failed: method is unavailable with group auth.

Неужели нельзя отправлять документы от лица сообщества? (Фотографии получается отправлять - проверял! Права на документы выставлены в настройках token'а). Документацию VK API читал - такого запрета не видел. Или это какая-то ошибка моя или библиотеки?

 import vk_api
from vk_api import VkUpload
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
def start(event):
    keyboard = VkKeyboard(one_time=True)
    keyboard.add_button('Ответить на вопросы', color=VkKeyboardColor.PRIMARY)
    keyboard.add_line()
    keyboard.add_button('Следующее задание', color=VkKeyboardColor.PRIMARY)
    msg_text = "Получите задание: "
    doc = upload.document_message("Test1.docx")[0]  # !!! Ошибка тут !!!
    attachments = list()
    attachments.append('file{}_{}'.format(doc['owner_id'], doc['id']))
    vk.messages.send(user_id=event.user_id, message=msg_text, keyboard=keyboard.get_keyboard(), attachment=attachments)
if __name__ == '__main__':
    token = 'my_token_here'
    vk_session = vk_api.VkApi(token=token)
    vk = vk_session.get_api()
    upload = VkUpload(vk_session)
    long_poll = VkLongPoll(vk_session)
    last_message_id = None
    for event in long_poll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me:
            if last_message_id is None:
                last_message_id = event.message_id
                start(event)
            else:
                pass  # Это сейчас не важно
snowbars152
Разобрался с этим сам. Проблема была в том, что забыл указать peer_id и неправильно добавлял вложения.
Вот правильный код:

 import vk_api
from vk_api import VkUpload
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
def start(event):
    keyboard = VkKeyboard(one_time=True)
    keyboard.add_button('Ответить на вопросы', color=VkKeyboardColor.PRIMARY)
    keyboard.add_line()
    keyboard.add_button('Следующее задание', color=VkKeyboardColor.PRIMARY)
    msg_text = "Получите задание: "
    mydoc = upload.document_message("Test1.docx", peer_id=event.user_id)[0]
    attachments = list()
    attachments.append('doc{}_{}'.format(mydoc['owner_id'], mydoc['id']))
    vk.messages.send(user_id=event.user_id, message=msg_text, keyboard=keyboard.get_keyboard(), attachment=','.join(attachments))
if __name__ == '__main__':
    token = 'my_token_here'
    vk_session = vk_api.VkApi(token=token)
    vk = vk_session.get_api()
    upload = VkUpload(vk_session)
    long_poll = VkLongPoll(vk_session)
    last_message_id = None
    for event in long_poll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me:
            if last_message_id is None:
                last_message_id = event.message_id
                start(event)
            else:
                pass  # Это сейчас не важно
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB