Python vk api getconversations

Как подучить доступ к сообщениям через python vk_api

Использую python-модуль vk_api (https://github.com/python273/vk_api). Не могу получить доступ к сообщениям аккаунта. Выдает ошибку: vk_api.exceptions.ApiError: [15] Access denied: no access to call this method

import vk_api vk_session = vk_api.VkApi('+7964#####','aWeSoMeP@s$w0rD') vk_session.auth() vk = vk_session.get_api() messages = vk.messages.get() 
vk_session = vk_api.VkApi('+7964#####', 'aWeSoMeP@s$w0rD') vk_session = vk_api.VkApi('+7964#####', 'aWeSoMeP@s$w0rD', 'messages') vk_session = vk_api.VkApi('+7964#####', 'aWeSoMeP@s$w0rD', scope='messages') 

Вам необходимо получить доступ с правами к скопу vk.com/dev/permissions. В Вашем случае messages – Denis640Kb 29 дек ’19 в 16:33

Передача в качестве третьего параметра ‘messages’ и scope=’messages’ выдает ту же ошибку(( – beerfect 29 дек ’19 в 17:59

Vk изменил формат запросов. Теперь используется метод — messages.getConversations пример messages = vk.method(«messages.getConversations», <"offset": 0, "count": 20, "filter": 'all'>) print(messages) – Denis640Kb 29 дек ’19 в 18:56

При изменении формата запроса на указанный вами всплывает: TypeError: __call__() takes 1 positional argument but 3 were given – beerfect 29 дек ’19 в 20:27

2 ответа 2

Проблема решилась, когда я подключился используя app_id верифицированного приложения(KAteMobile)

vk_session = vk_api.VkApi('+7964#####', 'aWeSoMeP@s$w0rD', app_id=2685278) vk_session.auth(token_only=True) 

Например чтобы отправить сообщение просто сформируйте словарь:

def write_aud_msg_chat(chat_id, attachment): return vk.method('messages.send', ) 
vk = vk_api.VkApi(token=token) group = '123456789' wait = 25 longpoll = VkBotLongPoll(vk, group, wait) for event in longpoll.listen(): 

Если же вы хотите авторизоваться с помощью пользователя просто укажите его токен (чтобы его получить перейдите по ссылке и скопируйте из адресной строки то что после acces_token= и до &: https://oauth.vk.com/authorize?client_id=2685278&scope=1073737727&redirect_uri=https://api.vk.com/blank.html&display=page&response_type=token&revoke=1 ):

vk1 = vk_api.VkApi(token=token1) 
 peer_id = event.object.peer_id chat_id = peer_id - 2000000000 user = event.object.from_id mess = event.object.text.lower() 

Сам код должен выглядеть примерно так:

def write_msg_chat(chat_id, message): return vk.method('messages.send', ) vk = vk_api.VkApi(token=token) group = '123456789' wait = 25 longpoll = VkBotLongPoll(vk, group, wait) for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: peer_id = event.object.peer_id chat_id = peer_id - 2000000000 user = event.object.from_id mess = event.object.text.lower() #тут реакция на различные команды 

Не забудте добавить НУЖНЫЕ импорты:

import vk_api from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType 

Источник

Читайте также:  Do onedu ru course view php

Как отправить новый пост во все беседы бота?

Данный код отправляет новый пост только тому чей id страницы записан в peer_id. Как мне отправить пост во все беседы где есть бот? Пытался через цикл передавать messages.getConversations но не получилось, и что в таком случае передавать в peer_id?

1е это передавать надо peer_ids — список бесед.
А для этого нам надо получить этот список с помощью messages.getConversations и внести их в список peer_ids

Lapita12

Для отправки сообщения во все беседы, где есть бот, вам нужно получить список всех бесед, в которых бот является участником, и отправить сообщение в каждую из них. Вы можете использовать метод messages.getConversations для получения списка бесед, а затем перебрать каждую беседу и отправить сообщение в ней.

conversations = await bot.api.messages.getConversations(filter='all') for conversation in conversations['items']: peer_id = conversation['peer']['id'] try: await bot.api.messages.send( peer_id=peer_id, message='Новый пост!', random_id=0, attachment=f'wall-_' ) except Exception as ex: print(f'error: ')

В этом примере мы получаем список всех бесед, используя метод messages.getConversations , и затем перебираем каждую беседу и отправляем сообщение в ней, используя метод messages.send . В peer_id мы передаем идентификатор беседы, а в attachment мы передаем идентификатор записи на стене, которую мы хотим прикрепить к сообщению.

Источник

Почему метод «message.get()» не работает?

Столкнулся с проблемой при работе с VK API на Python’е 3. Сделал простого бота по инструкциям (видео на YouTube, статьи различные и т.д.).

На следующий день, бот перестал работать. Происходила ошибка с параметрами метода message.get() (Ошибка №100). Зашел на документацию ВК, стал искать ошибку. Увидел, что метод устарел и понял, что метод лучше не использовать (даже если ошибка не в нем), но не знал что делать.

Читайте также:  Run php install script

На просторах Интернета нашел видео, в котором использовался метод messages.getConversations() , но он показался мне менее гибким, т.к. он возвращает информацию о диалогах бота и только последнее сообщение диалога (а предыдуший возвращал список диалогов в месте с сообщениями).

Хештеги: (Написал для поиска по словам)

vk vk-api vkontakte vkontakte-api вк вконтакте метод message.get метод messages.getConversations ошибка 100 параметры бот чат-бот бот для вк чат-бот для вк python python 3 python.3-x 

Ответы (1 шт):

Метод message.get устарел и возможно был заблокирован (а если ещё нет, все равно в не рекомендуется использовать). Вместо него лучше использовать сочетание методов messages.getConversations и messages.getHistory . 1 метод возвращает список диалогов(можно использовать фильтры), 2 возвращает сообщения диалога по его id. Для наглядности выполним следующий код:

VK = vk_api.VkApi(token = ТОКЕН_ДОСТУПА) # ТОКЕН_ДОСТУПА = 'ae4919g789965bf10. ' -- токен доступа к сообществу print(VK.method("messages.getConversations", )) #Метод, который собирает новые диалоги с неотвеченными сообщениями 

Результат (привел в читабельный вид):

 < 'count': 1, 'items': [< 'conversation': < 'unanswered': True, 'peer': < 'local_id': *айди собеседника или беседы*, 'type': 'user', 'id': *ID собеседника*, >'last_message_id': 312, 'in_read': 312, 'out_read': 312, 'can_write': >, 'last_message': < 'is_hidden': False, 'id': 312, 'conversation_message_id': 312, 'from_id': *айди автора последнего сообщения*, 'date': 1531127807, 'important': False, 'attachments': [], 'text': *Текст последнего сообщения*, 'out': 0, 'peer_id': *айди диалога*, 'random_id': 0, 'fwd_messages': [] >>] > 

На самом деле, метод messages.getConversations дает достаточно много, помимо последнего сообщения.

В нашем случае нам нужен параметр ‘peer_id’ — ID диалога. Кстати, хотел сказать, что в примере только 1 диалог, но их может быть и больше. По этому, мы будем постоянно пользоваться циклом for чтобы последовательно отвечать на сообщения разных диалогов. Теперь вместе с этим методом используем messages.getHistory :

VK = vk_api.VkApi(token = ТОКЕН_ДОСТУПА) Диалоги_Бота = VK.method("messages.getConversations", ) for Данные_о_диалоге in Диалоги_Бота['items']: ID_Диалога = Данные_о_диалоге['conversation']['peer']['local_id'] print(VK.method('messages.getHistory', )) 

И вот мы вывели на экран списки сообщений из каждого диалога. Далее, вместо того, чтобы выводить сообщения в консоль мы можем отвечать на них, удалять их, пересылать, записывать и т.д. Таким образом мы смогли заменить старый метод сочетанием 2-х новых.

Читайте также:  Текст

Источник

Как подучить доступ к сообщениям через python vk_api

Использую python-модуль vk_api (https://github.com/python273/vk_api). Не могу получить доступ к сообщениям аккаунта. Выдает ошибку: vk_api.exceptions.ApiError: [15] Access denied: no access to call this method

import vk_api vk_session = vk_api.VkApi('+7964#####','aWeSoMeP@s$w0rD') vk_session.auth() vk = vk_session.get_api() messages = vk.messages.get() 
vk_session = vk_api.VkApi('+7964#####', 'aWeSoMeP@s$w0rD') vk_session = vk_api.VkApi('+7964#####', 'aWeSoMeP@s$w0rD', 'messages') vk_session = vk_api.VkApi('+7964#####', 'aWeSoMeP@s$w0rD', scope='messages') 

Вам необходимо получить доступ с правами к скопу vk.com/dev/permissions. В Вашем случае messages – Denis640Kb 29 дек ’19 в 16:33

Передача в качестве третьего параметра ‘messages’ и scope=’messages’ выдает ту же ошибку(( – beerfect 29 дек ’19 в 17:59

Vk изменил формат запросов. Теперь используется метод — messages.getConversations пример messages = vk.method(«messages.getConversations», <"offset": 0, "count": 20, "filter": 'all'>) print(messages) – Denis640Kb 29 дек ’19 в 18:56

При изменении формата запроса на указанный вами всплывает: TypeError: __call__() takes 1 positional argument but 3 were given – beerfect 29 дек ’19 в 20:27

2 ответа 2

Например чтобы отправить сообщение просто сформируйте словарь:

def write_aud_msg_chat(chat_id, attachment): return vk.method('messages.send', ) 
vk = vk_api.VkApi(token=token) group = '123456789' wait = 25 longpoll = VkBotLongPoll(vk, group, wait) for event in longpoll.listen(): 

Если же вы хотите авторизоваться с помощью пользователя просто укажите его токен (чтобы его получить перейдите по ссылке и скопируйте из адресной строки то что после acces_token= и до &: https://oauth.vk.com/authorize?client_id=2685278&scope=1073737727&redirect_uri=https://api.vk.com/blank.html&display=page&response_type=token&revoke=1 ):

vk1 = vk_api.VkApi(token=token1) 
 peer_id = event.object.peer_id chat_id = peer_id - 2000000000 user = event.object.from_id mess = event.object.text.lower() 

Сам код должен выглядеть примерно так:

def write_msg_chat(chat_id, message): return vk.method('messages.send', ) vk = vk_api.VkApi(token=token) group = '123456789' wait = 25 longpoll = VkBotLongPoll(vk, group, wait) for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: peer_id = event.object.peer_id chat_id = peer_id - 2000000000 user = event.object.from_id mess = event.object.text.lower() #тут реакция на различные команды 

Не забудте добавить НУЖНЫЕ импорты:

import vk_api from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType 

Источник

Оцените статью