@CleRleQ
Учусь программированию, люблю игры.

Vk_api TypeError: __call__() takes 1 positional argument but 3 were given, во время получения имени по id возникает ошибка, что делать?

Добрый день, ошибка сразу после запуска кода:

Traceback (most recent call last):
File "C:/Python/lessons/server.py", line 15, in
user = vk.method("users.get", {"user_ids": 573881719})
TypeError: __call__() takes 1 positional argument but 3 were given

Эта часть кода служит для получения имени, фамилии, например для функции профиля в боте. Т.е из айди нужно взять имя и фамилию. Вопрос задан с целью исправить ошибку.

Код:

import vk_api, vk
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

authorize = vk_api.VkApi(token='ad6d1569fcd231ba7bb3af6d021144dc81a88d111111111111d5f0016a0ff5448c1ca33d649a2789b6975')
longpoll = VkBotLongPoll(authorize, group_id=206090038)
vk = authorize.get_api()


def write_message(sender, message):
    authorize.method('messages.send', {'chat_id': sender, 'message': message, "random_id": get_random_id()})


user = vk.method("users.get", {"user_ids": 573881719})
fullname = user[0]['first_name'] + ' ' + user[0]['last_name']


keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Профиль', color=VkKeyboardColor.NEGATIVE)
keyboard.add_button('Игры', color=VkKeyboardColor.POSITIVE)
keyboard.add_button('Информация', color=VkKeyboardColor.NEGATIVE)
keyboard.add_line()
keyboard.add_vkpay_button(hash="action=transfer-to-group&group_id=183415444")

for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat and event.message.get('text') !="":
        reseived_message = event.message.get('text'.lower())
        sender = event.chat_id
        if 'ку' in str(reseived_message) or 'привет' in str(reseived_message):
            write_message(sender, "Добрый день!")
    if 'Клавиатура' in str(event):
        if event.from_chat:
            vk.messages.send(
                keyboard=keyboard.get_keyboard(),
                key=('0a9252b579c0fdd1070832e111bb34f16f38'),
                server=('https://lp.vk.com/wh206090038'),
                ts=('64'),
                random_id=get_random_id(),
                message=fullname + 'Открыта!',
                chat_id=event.chat_id
            )
    if 'Профиль' in str(event):
        if event.from_chat:
            vk.messages.send(
                keyboard=keyboard.get_keyboard(),
                key=('0a9252b579c0fdd123b34f16f38'),  # ВСТАВИТЬ ПАРАМЕТРЫ
                server=('https://lp.vk.com/wh206090038'),
                ts=('64'),
                random_id=get_random_id(),
                message='Открыт!',
                chat_id=event.chat_id
            )
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
@RINAMI
Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
Добрый день, вы указываете переменную после ее использования, попробуйте так:
import vk_api, vk
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
vk = authorize.get_api()
authorize = vk_api.VkApi(token='ad6d1569fcd231ba7bb3af6d021144dc81a88d111111111111d5f0016a0ff5448c1ca33d649a2789b6975')
longpoll = VkBotLongPoll(authorize, group_id=206090038)


Как я понял, вам нужно получить имя и фамилию пользователя, в таком случае стоит сделать так:
def take_name(from_id)
     if from_id > 0:
        sender_info = getting_api.users.get(user_ids=from_id)[0]
        full_name = sender_info.get('first_name') + ' ' + sender_info['last_name']
        return full_name
        pass

P.S лучше переименуйте vk в что-нибудь другое, например getting_api
В итоге получится getting_api = vk.get_api()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alternativshik
@alternativshik
import vk_api, vk

потом этот же vk переприсваивается vk = authorize.get_api()

И дальше непонятно в итоге - вызовы библиотеки надо или этого второго vk
Ответ написан
Ваш ответ на вопрос

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

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