Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 8, 2019 07:09:00

snowbars152
Зарегистрирован: 2016-03-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

vk_api отправка файла личным сообщением сообщества

Добрый день, Коллеги!
Потребовалось написать бота для ВКонтате для общения и рассылки заданий студентам. Использую библиотеку 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  # Это сейчас не важно

Офлайн

#2 Фев. 19, 2019 09:38:55

snowbars152
Зарегистрирован: 2016-03-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

vk_api отправка файла личным сообщением сообщества

Разобрался с этим сам. Проблема была в том, что забыл указать 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  # Это сейчас не важно

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version