538f1e3972
- Pyrogram core is now fully asynchronous - Ditched Python 3.5, welcome 3.6 as minimum version. - Moved all types to pyrogram.types - Turned the Filters class into a module (filters) - Moved all filters to pyrogram.filters - Moved all handlers to pyrogram.handlers - Moved all emoji to pyrogram.emoji - Renamed pyrogram.api to pyrogram.raw - Clock is now synced with server's time - Telegram schema updated to Layer 117 - Greatly improved the TL compiler (proper type-constructor hierarchy) - Added "do not edit" warning in generated files - Crypto parts are executed in a thread pool to avoid blocking the event loop - idle() is now a separate function (it doesn't deal with Client instances) - Async storage, async filters and async progress callback (optional, can be sync too) - Added getpass back, for hidden password inputs
112 lines
4.1 KiB
ReStructuredText
112 lines
4.1 KiB
ReStructuredText
MTProto vs. Bot API
|
|
===================
|
|
|
|
Pyrogram is a framework that acts as a fully-fledged Telegram client based on MTProto, and this very feature makes it
|
|
already superior to, what is usually called, the official Bot API, in many respects. This page will therefore show you
|
|
why Pyrogram might be a better choice for your project by comparing the two APIs, but first, let's make it clear what
|
|
actually is the MTProto and the Bot API.
|
|
|
|
.. contents:: Contents
|
|
:backlinks: none
|
|
:depth: 1
|
|
:local:
|
|
|
|
-----
|
|
|
|
What is the MTProto API?
|
|
------------------------
|
|
|
|
`MTProto`_, took alone, is the name of the custom-made, open and encrypted communication protocol created by Telegram
|
|
itself --- it's the only protocol used to exchange information between a client and the actual Telegram servers.
|
|
|
|
The MTProto **API** on the other hand, is what people, for convenience, call the main Telegram API as a whole. This API
|
|
is able to authorize both users and bots and is built on top of the MTProto encryption protocol by means of
|
|
`binary data serialized`_ in a specific way, as described by the `TL language`_, and delivered using UDP, TCP or even
|
|
HTTP as transport-layer protocol.
|
|
|
|
.. _MTProto: https://core.telegram.org/mtproto
|
|
.. _binary data serialized: https://core.telegram.org/mtproto/serialize
|
|
.. _TL language: https://core.telegram.org/mtproto/TL
|
|
|
|
What is the Bot API?
|
|
--------------------
|
|
|
|
The `Bot API`_ is an HTTP(S) interface for building normal bots using a sub-set of the main MTProto API. Bots are special
|
|
accounts that are authorized via tokens instead of phone numbers. The Bot API is built yet again on top of the main
|
|
Telegram API, but runs on an intermediate server application that in turn communicates with the actual Telegram servers
|
|
using MTProto.
|
|
|
|
.. figure:: https://i.imgur.com/WvwBoZo.png
|
|
:align: center
|
|
|
|
.. _Bot API: https://core.telegram.org/bots/api
|
|
|
|
Advantages of the MTProto API
|
|
-----------------------------
|
|
|
|
Here is a list of all the advantages in using MTProto-based libraries -- such as Pyrogram -- instead of the official
|
|
HTTP Bot API. Using Pyrogram you can:
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Authorize both user and bot identities**
|
|
- :guilabel:`--` The Bot API only allows bot accounts
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Upload & download any file, up to 2000 MiB each (~2 GB)**
|
|
- :guilabel:`--` The Bot API allows uploads and downloads of files only up to 50 MB / 20 MB in size (respectively).
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Has less overhead due to direct connections to Telegram**
|
|
- :guilabel:`--` The Bot API uses an intermediate server to handle HTTP requests before they are sent to the actual
|
|
Telegram servers.
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Run multiple sessions at once, up to 10 per account (either bot or user)**
|
|
- :guilabel:`--` The Bot API intermediate server will terminate any other session in case you try to use the same
|
|
bot again in a parallel connection.
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Has much more detailed types and powerful methods**
|
|
- :guilabel:`--` The Bot API types often miss some useful information about Telegram entities and some of the
|
|
methods are limited as well.
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Obtain information about any message existing in a chat using their ids**
|
|
- :guilabel:`--` The Bot API simply doesn't support this
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Retrieve the whole chat members list of either public or private chats**
|
|
- :guilabel:`--` The Bot API simply doesn't support this
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Receive extra updates, such as the one about a user name change**
|
|
- :guilabel:`--` The Bot API simply doesn't support this
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Has more meaningful errors in case something went wrong**
|
|
- :guilabel:`--` The Bot API reports less detailed errors
|
|
|
|
.. hlist::
|
|
:columns: 1
|
|
|
|
- :guilabel:`+` **Get API version updates, and thus new features, sooner**
|
|
- :guilabel:`--` The Bot API is simply slower in implementing new features
|