Через longpoll. Но чтобы отвечал только в лс нужно проверять еще откуда приходит ивент, этот вариант и в беседу будет отвечать. Я уже не помню точно как там сделать проверку (но вроде как добавить
if event.from_user:
после команды / строки
if event.type == VkEventType.MESSAGE_NEW:
), в интернете примеров куча.
from vk_api.longpoll import VkLongPoll, VkEventType
vk_session = vk_api.VkApi(token="токен от страницы")
longpoll = VkLongPoll(vk_session)
vk = vk_session.get_api()
def send_msg(peer_id: int, message: str, attachment: str = ""):
return vk.messages.send(**locals(), random_id=0)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
# если вообще на любое сообщение, то убираем строку if event.text == 'текст который пишет пользователь':
if event.text == 'текст который пишет пользователь':
send_msg(event.peer_id, 'ответ бота')