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