Stack Overflow на русском Asked by 645 546 on February 22, 2021
Вот ошибка:
Traceback (most recent call last):
File "C:/Users/Danila/PycharmProjects/bot_all_to_telegramm/main.py", line 4, in <module>
vk_bot()
File "C:UsersDanilaPycharmProjectsbot_all_to_telegrammvk_bot.py", line 23, in vk_bot
longpoll = VkLongPoll(vk_session)
File "C:UsersDanilaAppDataLocalProgramsPythonPython37-32libsite-packagesvk_apilongpoll.py", line 517, in __init__
self.update_longpoll_server()
File "C:UsersDanilaAppDataLocalProgramsPythonPython37-32libsite-packagesvk_apilongpoll.py", line 531, in update_longpoll_server
response = self.vk.method('messages.getLongPollServer', values)
TypeError: __call__() takes 1 positional argument but 3 were given
Process finished with exit code 1
auth.py
import telebot
import vk_api
bot = telebot.TeleBot('токен')
def captcha_handler(captcha):
""" При возникновении капчи вызывается эта функция и ей передается объект
капчи. Через метод get_url можно получить ссылку на изображение.
Через метод try_again можно попытаться отправить запрос с кодом капчи
"""
key = input("Enter captcha code {0}: ".format(captcha.get_url())).strip()
# Пробуем снова отправить запрос с капчей
return captcha.try_again(key)
session_api = vk_api.VkApi(login='логин', password='пароль', app_id=2685278,
captcha_handler = captcha_handler)
session_api.auth(token_only=True)
vk_session = session_api.get_api()
vk_bot.py
from vk_api.longpoll import VkEventType, VkLongPoll
import random
from auth import bot, session_api, vk_session
def name_from_id(user_id):
user = vk_session.method("users.get", {"user_ids": user_id})
return user[0]['first_name'] + ' ' + user[0]['last_name']
def send_message(peer_id, message=None, attachment=None, keyboard=None, payload=None):
session_api.messages.send(peer_id=peer_id, message=message, random_id=random.randint(-2147483648, +2147483648),
attachment=attachment, keyboard=keyboard, payload=payload)
def vk_bot():
bot.send_message(1052739314, 'КУ!')
longpoll = VkLongPoll(vk_session)
print('Бот Вк успешно запустился!')
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
...
Отправка сообщений со страницы пользователя взята от сюда: https://www.youtube.com/watch?v=gsSZ7VPlkKs&feature=youtu.be. Это работает. Но в связке с телеграм ботом работать не хочет. Почему?
Судя по нагугленным мной примерам, здесь get_api()
лишнее:
session_api = vk_api.VkApi(login='логин', password='пароль', app_id=2685278,
captcha_handler = captcha_handler)
session_api.auth(token_only=True)
vk_session = session_api.get_api()
^^^^^^^^^^
longpoll = VkLongPoll(vk_session)
Надо так:
vk_session = session_api
Или без промежуточной переменной:
VkLongPoll(session_api)
Но не исключаю, что дальше по коду вам понадобится другая переменная со значением session_api.get_api()
, это надо разбираться. У вас скорее всего путаница какая-то в переменных.
Correct answer by CrazyElf on February 22, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP