Задать вопрос
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*.
  • Вопрос задан
  • 727 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 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'))

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

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽