Как можно увидеть страничный longpoll совсем неудобный и несёт в себе кучу ненужного, кроме того, если прилетает какое-нибудь вложение будь то фотография например:
с этим совсем ничего нельзя сделать, даже получить доп информацию этой фотографии через метод photos.getById, ибо кидает ошибку доступа.
Но если вызвать метод messages.getById
vk_session = vk_api.VkApi(login="", password="", app_id=2685278)
long_poll = VkLongPoll(vk_session)
vk_client = vk_session.get_api()
for event in long_poll.listen():
if event.type == VkEventType.MESSAGE_NEW:
event = DotDict(vk_client.messages.getById(message_ids=event.message_id)["items"][0])
print(event)
Предлагаю заменить event тот что прилетает от вконтакте на тот что получаем через вызов метода.
После замены можно делать вот так:
# если личное сообщение (не беседа) - пропускаем
if event.from_id == event.peer_id:
или
# если есть прикреплённые файлы/документ и т.д.
if event.attachments:
# подсчёт нескольких `attachments`
for attachment in event.attachments:
# если передано сообщение с фото
if attachment["type"] == "photo":
или
# если было совершено действие пользователя
if event.get("action"):
# пользователь вышел из беседы
if event["action"]["type"] == "chat_kick_user":
Я думаю это лучше оставить библиотекам направленным на удобство написания кода для ботов. Скорее всего философия vk_api немного другая. Посмотрите на библиотеку предназначенную для написания ботов, такую как vk_maria, автором которой являюсь я.
Для удобства использую следующий класс:
Обычный longpoll (страничный)
botlongpoll
Как можно увидеть страничный longpoll совсем неудобный и несёт в себе кучу ненужного, кроме того, если прилетает какое-нибудь вложение будь то фотография например:
с этим совсем ничего нельзя сделать, даже получить доп информацию этой фотографии через метод photos.getById, ибо кидает ошибку доступа. Но если вызвать метод messages.getById
Вывод будет как у группы, удобный вывод.
Предлагаю заменить event тот что прилетает от вконтакте на тот что получаем через вызов метода. После замены можно делать вот так:
или
или