Какова структура обновлений Telegram для приложения Flask? - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь запрограммировать бота Telegram с помощью webhook в приложении Flask с telepot, в PythonAnywhere. Итак, я хочу знать, какова структура обновлений, поступающих из Telegram, чтобы узнать, что там и как оно называется, и, по сути, использовать его в боте.

Я попытался записать полученное сообщение на консоль (хотя я не уверен, где должна быть консоль на PythonAnywhere), а также записать файл на том же сервере через python, но это не так работает либо.

#This that seemed easy didn't work either in the Flask web app
with open('log.txt', 'a') as f:
    f.write('Is this working?')

Такое ощущение, что мне не хватает какой-то простой информации, которую все считают само собой разумеющимся, но я не могу понять, что это такое.

1 Ответ

1 голос
/ 04 июля 2019

Было действительно что-то, чего я не заметил. Размещение на случай, если это кому-нибудь поможет.

В разделе веб-приложений PythonAnywhere есть три ссылки на файлы журналов, где вы можете увидеть, что может произойти на консоли в обычном приложении Python.

Эти ссылки выглядят так:

username.eu.pythonanywhere.com.access.log 
username.eu.pythonanywhere.com.error.log
username.eu.pythonanywhere.com.server.log #no .eu on the american PythonAnywhere

И server.log - это то место, где заканчиваются операторы консоли print.

Кроме того, обычные сообщения от пользователей Telegram выглядят так, когда они прибывают во Flask:

{
'update_id': 123456789, 
'message': {
    'message_id': 42, 
    'from': {
        'id': 42424242, 
        'is_bot': False, 
        'first_name': 'Joaquim', 
        'last_name': 'Pernil Rinoceronts', 
        'username': 'Juqim', 
        'language_code': 'ca'
        }, 
    'chat': {
        'id': 42424242, 
        'first_name': 'Joaquim',
        'last_name': 'Pernil Rinoceronts', 
        'username': 'Juqim', 
        'type': 'private'
        }, 
    'date': 1562247903, 
    'text': 'Patata'
    }
}

Стикеры имеют свою информацию, где 'text' будет:

'sticker': {
    'width': 512, 
    'height': 512, 
    'emoji': '?', 
    'set_name': 'Ruscamems', 
    'thumb': {
        'file_id': 'AAQEABNgnrsaAAQkkp4QRiVF1rokAAIC', 
        'file_size': 4840, 
        'width': 128, 
        'height': 128
        }, 
    'file_id': 'CAADBAADBQADkvulAumgmwOAjdfYAg', 
    'file_size': 36612
}

Изображения имеют 'photo' вместо этого, и они входят в коллекцию разных размеров:

'photo':[
    {
    'file_id': 'AgADBAADVrAxG2wj8FCs-f6v7AGFUQvo-RkABFGq4cIH4_MaHXIFAAEC', 
    'file_size': 2101, 
    'width': 66, 
    'height': 90
    },
    {
    #same but bigger (different id too)
    },
    ... #I got 4 sizes.
    ]

Полагаю, я тоже опубликую обратный звонок, и у нас будет много интересного:

{
'update_id': 123456793, 
'callback_query': {
    'id': '424242424242424242', 
    'from': { #Who pressed the Button
        'id': 42424242, 
        'is_bot': False, 
        'first_name': 'Joaquim', 
        'last_name': 'Pernil Rinoceronts', 
        'username': 'Juqim', 
        'language_code': 'ca'
        }, 
    'message': { #What message was the button in
        'message_id': 123, 
        'from': {
            'id': 434343434, 
            'is_bot': True, 
            'first_name': 'The Bot Name', 
            'username': 'name_bot'
            }, 
        'chat': {
            'id': 42424242, 
            'first_name': 'Joaquim', 
            'last_name': 'Pernil Rinoceronts', 
            'username': 'Juqim', 
            'type': 'private'
            }, 
        'date': 1562252792, 
        'text': 'A viam si funciona això', 
        'reply_markup': { #Keyboard pressed
            'inline_keyboard': [[{'text': 'Cliccami', 'callback_data': 'clicat'}]]
            }
        }, 
    'chat_instance': '1234123412341234242', 
    'data': 'clicat' #Callback data (button pressed)
    }
}
...