Skip to main content

Python3 Telegram's client implementation with full access to its API

Project description

Telethon

Telethon is Telegram client implementation in Python which uses the latest available API of Telegram. The project’s core only is based on TLSharp, a C# Telegram client implementation.

Why Telethon?

Why should I bother with Telethon? There are more mature projects already, such as telegram-cli with even (limited) Python support. And we have the official clients!

With Telethon you don’t really need to know anything before using it. Create a client with your settings. Connect. You’re ready to go.

Being written entirely on Python, Telethon can run as a script under any environment you wish, (yes, Android too). You can schedule it, or use it in any other script you have. Want to send a message to someone when you’re available? Write a script. Do you want check for new messages at a given time and find relevant ones? Write a script.

Hungry for more API calls which the TelegramClient class doesn’t seem to have implemented? Please read [this section](#using-more-than-just-telegramclient).

Obtaining your Telegram API ID and Hash

In order to use Telethon, you first need to obtain your very own API ID and Hash:

  1. Follow this link and login with your phone number.

  2. Click under API Development tools.

  3. A Create new application window will appear. Fill in your application details. There is no need to enter any URL, and only the first two fields (App title and Short name) can be changed later as long as I’m aware.

  4. Click on Create application at the end.

Now that you know your API ID and Hash, you can continue installing Telethon.

Installing Telethon

Installing Telethon via pip

On a terminal, issue the following command:

sudo -H pip install telethon

You’re ready to go.

Installing Telethon manually

  1. Install the required pyaes module: sudo -H pip install pyaes (GitHub, package index)

  2. Clone Telethon’s GitHub repository: git clone https://github.com/LonamiWebs/Telethon.git

  3. Enter the cloned repository: cd Telethon

  4. Run the code generator: python3 telethon_generator/tl_generator.py

  5. Done!

Running Telethon

If you’ve installed Telethon via pip, launch an interactive python3 session and enter the following:

>>> from telethon import InteractiveTelegramClient
>>> # 'sessionid' can be 'yourname'. It'll be saved as yourname.session
>>> # Also (obviously) replace the api_id and api_hash with your values
...
>>> client = InteractiveTelegramClient('sessionid', '+34600000000',
...     api_id=12345, api_hash='0123456789abcdef0123456789abcdef')

┌───────────────────────────────────────────────────────────┐
                      Initialization                       
└───────────────────────────────────────────────────────────┘
Initializing interactive example...
Connecting to Telegram servers...
>>> client.run()

If, on the other hand, you’ve installed Telethon manually, head to the api/ directory and create a copy of the settings_example file, naming it settings (lowercase!). Then fill the file with the corresponding values (your api_id, api_hash and phone number in international format).

Then, simply run python3 try_telethon.py to start the interactive example.

Advanced uses

Using more than just TelegramClient

The TelegramClient class should be used to provide a quick, well-documented and simplified starting point. It is not meant to be a place for _all_ the available Telegram Request’s, because there are simply too many.

However, this doesn’t mean that you cannot invoke all the power of Telegram’s API. Whenever you need to invoke a Telegram Request, all you need to do is the following:

result = client.invoke(SomeRequest(...))

You have just invoke’d SomeRequest and retrieved its result! That wasn’t hard at all, was it? Now you may wonder, what’s the deal with all the power of Telegram’s API? Have a look under tl/functions/. That is everything you can do. You have over 200 API `Request`’s at your disposal.

However, we don’t pretty know how that result looks like. Easy. print(str(result)) should give you a quick overview. Nevertheless, there may be more than a single result! Let’s have a look at this seemingly innocent TL definition:

messages.getWebPagePreview#25223e24 message:string = MessageMedia;

Focusing on the end, we can see that the result of invoking GetWebPagePreviewRequest is MessageMedia. But how can MessageMedia exactly look like? It’s time to have another look, but this time under tl/types/:

$ tree -P "message_media_*"
.
├── tl
   └── types
       ├── message_media_contact.py
       ├── message_media_document.py
       ├── message_media_empty.py
       ├── message_media_geo.py
       ├── message_media_photo.py
       ├── message_media_unsupported.py
       ├── message_media_venue.py
       └── message_media_web_page.py

Those are eight different types! How do we know what exact type it is to determine its properties? A simple if type(result) == MessageMediaContact: or similar will do. Now you’re ready to take advantage of Telegram’s polymorphism.

Tips for porting Telethon

First of all, you need to understand how the scheme.tl (TL language) works. Every object definition is written as follows:

name#id argument_name:argument_type = CommonType

This means that in a single line you know what the TLObject name is. You know it’s unique ID, and you know what arguments it has. It really isn’t that hard to write a generator for generating code to any platform!

The generated code should also be able to encode the Request into bytes, so they can be sent over the network. This isn’t a big deal either, because you know how the TLObject’s are made.

Once you have your own [code generator](telethon_generator/tl_generator.py), start by looking at the first release of Telethon. The code there is simple to understand, easy to read and hence easy to port. No extra useless features. Only the bare bones. Perfect for starting a new implementation.

P.S.: I may have lied a bit. The TL language is not that easy. But it’s not that hard either. You’re free to sniff the parser/ files and learn how to parse other more complex lines. Or simply use that code and change the [SourceBuilder](telethon_generator/parser/source_builder.py)!

Code generator limitations

The current code generator is not complete, yet adding the missing features would only over-complicate an already hard-to-read code. Some parts of the .tl file should be omitted, because they’re “built-in” in the generated code (such as writing booleans, etc.).

In order to make sure that all the generated files will work, please make sure to always comment out these lines in scheme.tl (the latest version can always be found here):

// boolFalse#bc799737 = Bool;
// boolTrue#997275b5 = Bool;
// true#3fedd339 = True;
// vector#1cb5c415 {t:Type} # [ t ] = Vector t;

Also please make sure to rename updates#74ae4240 ... to updates_tg#74ae4240 ... or similar to avoid confusion between the updates folder and the updates.py file! Note that depending on the name, it may break things somewhere else. So please stick with the suggested name or give one which is still descriptive enough and easy to remember.

Updating the scheme.tl

Have you found a more updated version of the scheme.tl file? Those are great news! Updating is as simple as grabbing the latest version and replacing the one you can find in this same directory by the updated one. Don’t forget to run python3 tl_generator.py.

If the changes weren’t too big, everything should still work the same way as it did before; but with extra features.

Project details


Release history Release notifications | RSS feed

This version

0.6

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

Telethon-0.6.tar.gz (498.8 kB view details)

Uploaded Source

Telethon-0.6.linux-x86_64.tar.gz (510.3 kB view details)

Uploaded Source

Built Distribution

Telethon-0.6-py3-none-any.whl (634.5 kB view details)

Uploaded Python 3

File details

Details for the file Telethon-0.6.tar.gz.

File metadata

  • Download URL: Telethon-0.6.tar.gz
  • Upload date:
  • Size: 498.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for Telethon-0.6.tar.gz
Algorithm Hash digest
SHA256 cc2f4c9e76fd1bd340f2888812ee8d38cc21090428dc3ce03256389580463c95
MD5 ed8626e6059bccfd744bee51def0a00c
BLAKE2b-256 a5ad9189e8c122f70aef80f1be87b29b5663b25fb350d97ea1d4ff95a419ae29

See more details on using hashes here.

File details

Details for the file Telethon-0.6.linux-x86_64.tar.gz.

File metadata

File hashes

Hashes for Telethon-0.6.linux-x86_64.tar.gz
Algorithm Hash digest
SHA256 a280a7095377b8a391868472e2a621952b1d1182ea2c01b2e43dcb761ca03cb9
MD5 dc56563322c6760dac3b7ca06cc8fdd1
BLAKE2b-256 c7bf062bbc9fc337b20fdb5cb70a487db46fe08d86bb4ab579d1c598c71f41f0

See more details on using hashes here.

File details

Details for the file Telethon-0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for Telethon-0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 5d1c5580d46f6e5b45931fdc901c1eb05ee813d86ce3e6a5d937d0ce553478f7
MD5 6406967d5a1ae4225b32550ecee7f6d7
BLAKE2b-256 7f1e246cb1e7df6b0b039faf16bac1448abdf3ef1de4f26916e71d1cfbcfe95b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page