Vk api python переслать сообщение

Как отправить сообщение VK, с помощью Python 3?

Добрый день. До этого писал бота используя vk_api и отправлял сообщения в ответ на присланные. Все работает отлично и без проблем. Но тут встала задача отправки сообщения пользователю просто из списка. Начал искать в интернете и натолкнулся на такую возможность, но через приложение. Во всех примерах (датируемых 2017) используется методы — vk.Session и vk.API, которых на данный момент в библиотеке vk нет. Других примеров найти не смог. Вопрос — как все же отправить сообщение пользователю, зная его ID? Спасибо.

Отправлять сообщение может только группа и только в том случае если пользователь уже отправил ей сообщение

vks = vk_api.VkApi(token=token) vk = vks.get_api() vk.messages.send(peer_id = 'ид пользователя или конфы в которую хочешь отправить', random_id = 0, message = 'сообщение')

Вот что получилось:
1. С помощью OAuth-авторизации (https://oauth.vk.com/authorize?client_id=&. смог получить token
Далее

import vk token = session = vk.AuthSession(access_token = token) api = vk.API(session) # Например, смог получить тестовые данные о пользователе api.users.get(user_ids=1, v='5.103') # Но при попытке отправки сообщения - получаю Access denied api.messages.send(user_id=96440718, message='Test message', v='5.103')

Как это победить? Или все же невозможно отправить сообщение пользователю просто так?

Нашел такую вот информацию. Видимо теперь просто так сообщение не отправить.

vk.Session и vk.API были в vk, а вы используете vk_api. Это разные модули.

from vk_api import VkApi, AuthError from vk_api.utils import get_random_id vk_session = VkApi('login', 'password') vk_session.auth(token_only=True) vk = vk_session.get_api() vk.messages.send(user_id=ID_пользователя, message='Сообщение', random_id=get_random_id())
from vk_api import VkApi, AuthError from vk_api.utils import get_random_id vk_session = VkApi(login = , password = ) vk_session.auth(token_only=True) vk = vk_session.get_api() vk.messages.send(user_id=, message='Сообщение', random_id=get_random_id())

В результате выдает — «Access denied: no access to call this method». Мне вот интересно, а вы сами хоть раз это делали? Или просто вырываете куски кода из интернета и сюда отправляете?

Читайте также:  Получить подстроку из строки java

mspuz, Так же попробовал отправлять сообщение друзьям:

from vk_api import VkApi, AuthError from vk_api.utils import get_random_id vk_session = VkApi(login = , password = ) vk_session.auth(token_only=True) vk = vk_session.get_api() for friend in vk.friends.get()['items']: res = vk.messages.send(user_id=friend, message='Сообщение', random_id=get_random_id())

Список ID’шников своих друзей я удачно получаю. Но при попытке отправить сообщение — получаю все тот же «[15] Access denied: no access to call this method».

mspuz, да пробывал, спасибо. Выше человек уже уточнил что с недавних пор message.send не работает для простых смертных. Но вы можете это обойти получив токен из официального приложения и авторизовавшись с его помощью. (Так же нужно указать app_id официального приложения)

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reply_to have to be message from same chat (Как боту ответить на сообщение?) #224

reply_to have to be message from same chat (Как боту ответить на сообщение?) #224

Comments

import vk_api from vk_api.bot_longpoll import VkBotLongPoll vk_session = vk_api.VkApi(token='мой токен') vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, 'айди моей группы') for event in longpoll.listen(): if event.from_chat and event.obj.text.lower() == 'Привет': vk.messages.send( chat_id=event.chat_id, random_id=get_random_id(), message='Привет!', reply_to=event.obj.conversation_message_id, ) 

При попытке отправить сообщение получаю ошибку:
vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: reply_to have to be message from same chat

The text was updated successfully, but these errors were encountered:

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

image

Как грустно все это. Хорошо, что нашел эту статью. А то я несколько дней искал и пытался понять, что я делаю не так. Спасибо!

@BrokenFG, спасибо за ответ.
Пол интернета перерыл, так и не нашел инструкции как пересылать.

Год прошел, а проблема осталась.

2020 уже, а бот все еще не может отвечать в беседах

Не знаю с чем у вас проблема, ребят. Если пишете бота, работающего от имени группы, то нужно настроить везде доступы + сделать бота админом.
Если пишете бота, который отвечает от страницы пользователя, то сделайте отправку на peer_id
В видео пример корректного, рабочего кода: https://www.youtube.com/watch?v=gsSZ7VPlkKs

@Sergey-Volchkov
А бот может писать в беседе? У меня настроен везде доступ, админка ему дана в беседе, но отвечает в личные сообщения

@Sergey-Volchkov
А бот может писать в беседе? У меня настроен везде доступ, админка ему дана в беседе, но отвечает в личные сообщения

Вместо user_id вставляйте peer_id беседы, и бот ответит в беседу

А бот может писать в беседе? У меня настроен везде доступ, админка ему дана в беседе, но отвечает в личные сообщения

Вместо user_id вставляйте peer_id беседы, и бот ответит в беседу

image

Хорошие новости, если мне правдиво ответили:

Ждём 5.125, или что-то в этом роде.

Прошло больше года, а проблема так и не решена.

Библиотеку не использовал, на обычных requests, но сам факт.

До сих пор не исправили, сейчас проверил. Осталось месяц подождать до годовщины ошибки и будет два года.

Вроде как есть способ. По крайней мере у меня работает. В методе vk.messages.send есть метод forward, вот через него можно и переслать сообщение:

import vk_api import json from vk_api.bot_longpoll import VkBotLongPoll vk_session = vk_api.VkApi(token='мой токен') vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, 'айди моей группы') for event in longpoll.listen(): if event.from_chat and event.obj.text.lower() == 'Привет': fwdmsg = vk.messages.send( chat_id=event.chat_id, random_id=get_random_id(), message='Привет!', forward=json.dumps(fwdmsg) ) 

Если нужно переслать сообщение, то «reply_to» ставим в 0. Тогда можно пересылать несколько сообщений.

@DragonGamees
Вроде как есть способ. По крайней мере у меня работает. В методе vk.messages.send есть метод forward, вот через него можно и переслать сообщение:

Уже прошло больше 2-х лет, а так и не сделали, но спасибо тебе за это! (сам пытался сделать через forward, вообще не получалось)

пошло 4 года, интересно, решил ли он проблему?)

пошло 4 года, интересно, решил ли он проблему?)

Скорее всего и не исправят, останется только тот способ, что я выше написал

Хах, мой код уже не умеет отвечать на сообщения, только пересылать их. VK очень классная контора.

а как ты пересылаешь их? я так и не разобрался

Вот кусок кода, он по идее отвечает и пересылает на любое сообщение в беседе и в личном сообщении, но сейчас почему то он только пересылает. Версия API 5.95.

from random import randint from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType vk_session = vk_api.VkApi(token='КЛЮЧ СООБЩЕСВА') vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, "ИД СООБЩЕСВА") for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: vk.messages.send( peer_id=event.obj.peer_id, random_id=randint(-2147483648, 2147483647), message='reply_to 1', forward = json.dumps() ) vk.messages.send( peer_id=event.obj.peer_id, random_id=randint(-2147483648, 2147483647), message='reply_to 0', forward = json.dumps() ) 

Если нужно только в личных сообщениях, есть другой код, где все работает
Если нужно можешь обращаться

Вот кусок кода, он по идее отвечает и пересылает на любое сообщение в беседе и в личном сообщении, но сейчас почему то он только пересылает. Версия API 5.95.

from random import randint from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType vk_session = vk_api.VkApi(token='КЛЮЧ СООБЩЕСВА') vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, "ИД СООБЩЕСВА") for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: vk.messages.send( peer_id=event.obj.peer_id, random_id=randint(-2147483648, 2147483647), message='reply_to 1', forward = json.dumps() ) vk.messages.send( peer_id=event.obj.peer_id, random_id=randint(-2147483648, 2147483647), message='reply_to 0', forward = json.dumps() ) 

Снимок экрана 2023-02-19 222237

Пример работы кода

Если нужно только в личных сообщениях, есть другой код, где все работает
Если нужно можешь обращаться

да, в личных сообщениях я умею, а вот пересылать не понял как. Спасибо

Все, я разобрался, мне тех поддержка помогла, в моем коде была ошибка froward принимает is_reply
Вот полностью рабочий код

from random import randint from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType vk_session = vk_api.VkApi(token='КЛЮЧ СООБЩЕСВА') vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, "ИД СООБЩЕСВА") for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: vk.messages.send( peer_id=event.obj.peer_id, random_id=randint(-2147483648, 2147483647), message='is_reply 1', forward = json.dumps() ) vk.messages.send( peer_id=event.obj.peer_id, random_id=randint(-2147483648, 2147483647), message='is_reply 0', forward = json.dumps() ) 

Вообще судя по всему использовать этот код, так как он работает и в личных и в беседах

Источник

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