@d00dguy

VK Api — почему не могу вызвать метод?

Авторизуюсь, как пользователь, используя логин, пароль, токен, аутентификатор и капчу. Использую библиотеку vk_api с лонгпулом и другими библиотеками. Мне нужно сделать так, чтобы к сообщению прикреплялось изображение. Мельком прочитал документацию, загуглил и нашёл код, что указан здесь.
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
import requests
import random

vk_session = vk_api.VkApi(login=login, password=password, captcha_handler=c_h, token=token)
longpoll = VkLongPoll(vk_session)
vk = vk_session.get_api()
while True:
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.from_chat:
             if event.text.lower() == '!бот, табличка':
                    a = vk.method('photos.getMessagesUploadServer')
                    b = requests.post(a['upload_url'], files={'photo': open('image_edited.png', 'rb')}).json()
                    c = vk.method('photos.saveMessagesPhoto',
                                  {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
                    d = 'photo{}_{}'.format(c['owner_id'], c['id'])

                    vk.messages.send(
                        chat_id=event.chat_id,
                        random_id=random_id(),
                        message='Картинка здесь',
                        attachment = d
                    )

И ничего не работает. Я пишу сообщение, после чего программа аварийно завершается с такой вот ошибкой:
a = vk.method('photos.getMessagesUploadServer')
TypeError: __call__() takes 1 positional argument but 2 were given
Почему так происходит? Ведь даже в документации указывается, что изначально нужно вызвать метод photos.getMessagesUploadServer. Может быть, дело в авторизации через страничку, а то вдруг там другой способ загрузки изображения?

Извиняюсь заранее за слишком тупой вопрос, я просто совсем новичок и работаю с vk_api недавно
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
@BoBaHPyt
Программист
Твоя ошибка в том, что ты скопировал только часть кода :)
У тебя переменная vk объявлена как:
vk = vk_session.get_api()
На сайте откуда ты скопировал код - ей было присвоено другое значение.

Замени все строки типа vk.method('amethod.bmethod')
На
vk.amethod.bmethod()

То есть:
a = vk.method('photos.getMessagesUploadServer')
b = requests.post(a['upload_url'], files={'photo': open('image_edited.png', 'rb')}).json()
c = vk.method('photos.saveMessagesPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
На
a = vk.photos.getMessagesUploadServer()
b = requests.post(a['upload_url'], files={'photo': open('image_edited.png', 'rb')}).json()
c = vk.photos.saveMessagesPhoto(photo=b['photo'], server=b['server'], hash=b['hash'])[0]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vk.method('photos.saveMessagesPhoto',
      values = {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]

так?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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