python273 / vk_api

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper
https://pypi.org/project/vk-api/
Apache License 2.0
1.33k stars 321 forks source link

Исправление примера vk_api/examples/bot_longpoll.py #336

Closed dhvcc closed 3 years ago

dhvcc commented 4 years ago

В данном моменте примера есть ошибка. Если приходит MESSAGE_NEW, то что бы получить сам дикт message необходимо обратиться к event.obj.message, тогда как при MESSAGE_REPLY наш дикт находится в event.obj.

Итог таков, что при выполнении примера словив MESSAGE_NEW строка, например, print(event.obj.from_id) выдаст нам в любом случае None, ведь нужный from_id находится по адресу event.obj.message['from_id'] (И да, никак не по event.obj.message.from_id)

Предлагаю как-то уравнять вид event.obj получаемого в MESSAGE_NEW к event.obj для MESSAGE_REPLY

Окружение

vk_api: 11.6.1

API: 5.103

Пример

import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

def main():
""" Пример использования bots longpoll
    https://vk.com/dev/bots_longpoll
"""

vk_session = vk_api.VkApi(token='your_group_token')

longpoll = VkBotLongPoll(vk_session, 'your_group_id')

for event in longpoll.listen():

    if event.type == VkBotEventType.MESSAGE_NEW:
        print('Новое сообщение:')
        print('Для меня от: ', end='')
        print(event.obj.from_id) # NONE
        print('Текст:', event.obj.text) # NONE
        print()

    elif event.type == VkBotEventType.MESSAGE_REPLY:
        print('Новое сообщение:')
        print('От меня для: ', end='')
        print(event.obj.peer_id) # Нормальный peer_id
        print('Текст:', event.obj.text) # Нормальный text
        print()
python273 commented 4 years ago

message недавно добавили, прмер не обновлялся. А в MESSAGE_REPLY точно нет сообщения?

dhvcc commented 4 years ago

В MESSAGE_REPLY всё нормально работает, там как раз и можно сразу обратиться по event.obj.peer_id не используя ключи дикта .message как для MESSAGE_NEW (event.obj.message['from_id'])

NoXXik commented 4 years ago

Здравствуйте, решили эту проблему нет? У меня так же выходит None, а в reply нормально все. Как можно исправить?

huarlhook commented 4 years ago

Здравствуйте, решили эту проблему нет? У меня так же выходит None, а в reply нормально все. Как можно исправить?

Вместо event.obj.from_id из примера в 5.103 нужно использовать event.message.from_id. Аналогично с event.obj.text: используйте event.message.text

Вопрос ведь в этом был?

NoXXik commented 4 years ago

Да, вопрос был в этом, благодарю. Пол дня просидел. Хотел уже начать искать ошибку в модуле, открыл посмотрел, а потом закрыл) Спасибо

dhvcc commented 3 years ago

Видимо, ничего не измени(лось/тся)

Закрываю из-за неактивности