kustiktm_kirill
@kustiktm_kirill

Как получить текст из fwd_messages в vk_api?

Человек пересылает сообщение из другого диалога боту. Нужно получить содержимое сообщения, его текст.
Сейчас есть такой код.
import vk_api

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

from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
longpoll = VkBotLongPoll(vk_session, group_id=194081345)
vk = vk_session.get_api() 

while True:
    for event in longpoll.listen():
        if event.type == VkBotEventType.MESSAGE_NEW and event.from_user:
            fwd_messages = [{'date': 1587065635, 'from_id': 574078662, 'text': 'Мда..Вк на приложении сдохло', 'attachments': [], 'conversation_message_id': 1887}], 'conversation_message_id': 328, 'peer_id': 396298943, 'id': 844}], 'important': False, 'random_id': 0, 'attachments': [], 'is_hidden': False}, 'client_info': {'button_actions': ['text', 'vkpay', 'open_app', 'location', 'open_link'], 'keyboard': True, 'inline_keyboard': True, 'lang_id': 0}}, 'group_id': 194081345, 'event_id': '919d7461a9d3217cb9f1b9eb50c7b5299571140d'}]
            print(event.object.message)
            s = fwd_messages[8]

'''
{'type': 'message_new', 'object': { 'message': 
    {'date': 1587065982, 'from_id': 396298943, 'id': 845, 'out': 0, 'peer_id': 396298943, 'text': '', 'conversation_message_id': 329, 'fwd_messages': 
        [{'date': 1587065973, 'from_id': 396298943, 'text': '', 'attachments': [], 'fwd_messages':
            [{'date': 1587065635, 'from_id': 574078662, 'text': 'Мда..Вк на приложении сдохло', 'attachments': [], 'conversation_message_id': 1887}], 'conversation_message_id': 328, 'peer_id': 396298943, 'id': 844}], 'important': False, 'random_id': 0, 'attachments': [], 'is_hidden': False}, 'client_info': {'button_actions': ['text', 'vkpay', 'open_app', 'location', 'open_link'], 'keyboard': True, 'inline_keyboard': True, 'lang_id': 0}}, 'group_id': 194081345, 'event_id': '919d7461a9d3217cb9f1b9eb50c7b5299571140d'}
            '''

Не получается так сказать получить массив fwd_messages. Его путь по json - event.object.message.*тут должно быть fwd_messages*.
  • Вопрос задан
  • 687 просмотров
Решения вопроса 1
Вам надо читать основы по питону
t = {
    'type': 'message_new',
    'object': {
        'message': {
            'date': 1587065982,
            'from_id': 396298943,
            'id': 845, 'out': 0,
            'peer_id': 396298943,
            'text': '',
            'conversation_message_id': 329,
            'fwd_messages':
                [{'date': 1587065973, 'from_id': 396298943, 'text': '',
                  'attachments': [], 'fwd_messages':
                      [{'date': 1587065635, 'from_id': 574078662,
                        'text': 'Мда..Вк на приложении сдохло', 'attachments': [],
                        'conversation_message_id': 1887}],
                  'conversation_message_id': 328, 'peer_id': 396298943, 'id': 844}],
            'important': False, 'random_id': 0, 'attachments': [], 'is_hidden': False},
        'client_info': {
            'button_actions': ['text', 'vkpay', 'open_app', 'location', 'open_link'],
            'keyboard': True, 'inline_keyboard': True, 'lang_id': 0}},
    'group_id': 194081345, 'event_id': '919d7461a9d3217cb9f1b9eb50c7b5299571140d'}

# Можно просто
print(t['object']['message']['fwd_messages'])
# Можно не ловя ошибок
print(t.get('object', {}).get('message', {}).get('fwd_messages'))


# Можно обернуть в функцию и скармливать строку
def get_key(obj: dict, path):
    for k in path.split('.'):
        obj = obj.get(k, {})

    return obj


print(get_key(t, 'object.message.fwd_messages'))

Еще можно в класс все это заворачивать. но мне тут уже лень пример делать
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы