2018-01-05 02:59:53 +03:00
|
|
|
|
=================
|
|
|
|
|
Project Structure
|
|
|
|
|
=================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Main interface
|
|
|
|
|
**************
|
|
|
|
|
|
|
|
|
|
The library itself is under the ``telethon/`` directory. The
|
|
|
|
|
``__init__.py`` file there exposes the main ``TelegramClient``, a class
|
|
|
|
|
that servers as a nice interface with the most commonly used methods on
|
|
|
|
|
Telegram such as sending messages, retrieving the message history,
|
|
|
|
|
handling updates, etc.
|
|
|
|
|
|
|
|
|
|
The ``TelegramClient`` inherits the ``TelegramBareClient``. The later is
|
|
|
|
|
basically a pruned version of the ``TelegramClient``, which knows basic
|
|
|
|
|
stuff like ``.invoke()``\ 'ing requests, downloading files, or switching
|
|
|
|
|
between data centers. This is primary to keep the method count per class
|
|
|
|
|
and file low and manageable.
|
|
|
|
|
|
|
|
|
|
Both clients make use of the ``network/mtproto_sender.py``. The
|
|
|
|
|
``MtProtoSender`` class handles packing requests with the ``salt``,
|
|
|
|
|
``id``, ``sequence``, etc., and also handles how to process responses
|
|
|
|
|
(i.e. pong, RPC errors). This class communicates through Telegram via
|
|
|
|
|
its ``.connection`` member.
|
|
|
|
|
|
|
|
|
|
The ``Connection`` class uses a ``extensions/tcp_client``, a C#-like
|
|
|
|
|
``TcpClient`` to ease working with sockets in Python. All the
|
|
|
|
|
``TcpClient`` know is how to connect through TCP and writing/reading
|
|
|
|
|
from the socket with optional cancel.
|
|
|
|
|
|
|
|
|
|
The ``Connection`` class bundles up all the connections modes and sends
|
|
|
|
|
and receives the messages accordingly (TCP full, obfuscated,
|
|
|
|
|
intermediate…).
|
|
|
|
|
|
|
|
|
|
Auto-generated code
|
|
|
|
|
*******************
|
|
|
|
|
|
|
|
|
|
The files under ``telethon_generator/`` are used to generate the code
|
2018-04-15 15:04:58 +03:00
|
|
|
|
that gets placed under ``telethon/tl/``. The parsers take in files in
|
|
|
|
|
a specific format (such as ``.tl`` for objects and ``.json`` for errors)
|
|
|
|
|
and spit out the generated classes which represent, as Python classes,
|
|
|
|
|
the request and types defined in the ``.tl`` file. It also constructs
|
|
|
|
|
an index so that they can be imported easily.
|
|
|
|
|
|
|
|
|
|
Custom documentation can also be generated to easily navigate through
|
|
|
|
|
the vast amount of items offered by the API.
|