ipatov_dn
@ipatov_dn

Как на Python + vk api при получении нового письма автоматически отвечать собеседнику?

Приветствую, вообщем выпил все успокоительное что было в доме и ноги болят от приседаний
есть кусок кода где авторизуюсь а вк далее надо отследить появление нового письма, использую messages.getDialogs с параметрами count=20 и unread=1 но когда это запускаю то получаю мат от ide в виде vk.exceptions.VkAPIError: 100.
import vk

session = vk.AuthSession(
                        'app_id',
                        'login',
                        'pass',
                        scope='messages'
                        )
vk_api = vk.API(session)

massages=vk_api.messages.getDialogs(count=20, unread=1)

print(massages)
  • Вопрос задан
  • 5834 просмотра
Решения вопроса 1
ipatov_dn
@ipatov_dn Автор вопроса
import vk
import time
import requests as req
from lxml import html

app_id, login, password = 'app_id', 'login@vk.com', 'password'
session = vk.AuthSession(app_id, login, password, scope='messages')
vk_api = vk.API(session, v='5.62')

while True:
    massages=vk_api.messages.getDialogs(count=20, unread=1)
   
    if massages['count']==1:
        print('Новое письмо', massages)
        id = massages['items'][0]['message']['user_id']
        body=massages['items'][0]['message']['body']
        print(id, body)
        if body=='bash':
            r = req.get('http://bash.im/random')
            doc = html.document_fromstring(r.text)
            bash = '\n'.join(doc.xpath('//*[@id="body"]/div[3]/div[@class="text"]/text()'))
            vk_api.messages.send(user_id=id, message=bash)
            print()
        else:
            vk_api.messages.send(user_id=id, message='Если вы введете "bash" то я вышлю вам цитату с bash.im')
    elif massages['count']==0:
        print('Новых писем нет')
    time.sleep(1)


спасибо за подсказку с версией prawn-cake
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@prawn-cake
Попробуйте https://github.com/prawn-cake/vk-requests
Библиотека из коробки обрабатывает много кейсов и в ней было исправлено много недочетов по сравнению с vk. Ну и она так же python 3 compatible.

В случае ответа на сообщения, например, это может выглядеть так
api = vk_requests.create_api(app_id=123, login='User', password='Password', scope=['offline', 'messages'])
messages = api.messages.getDialogs(count=20, unread=1)

for msg in messages['items']:
    api.messages.send(peer_id=msg['user_id'], message='Hello world')
Ответ написан
@gameover74
Использование частых однотипных запросов к апи вк в лучшем случае обойдётся игнором этих запросов.
В Вашем случае лучше использовать для личных сообщений этот метод - https://vk.com/dev/messages.getLongPollServer.
В случае сообщений в сообщество - https://vk.com/dev/callback_api.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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