2019-01-07 17:48:25 +03:00
|
|
|
# Examples
|
|
|
|
|
|
|
|
This folder contains several single-file examples using [Telethon].
|
|
|
|
|
|
|
|
## Requisites
|
|
|
|
|
|
|
|
You should have the `telethon` library installed with `pip`.
|
|
|
|
Run `python3 -m pip install --upgrade telethon --user` if you don't
|
|
|
|
have it installed yet (this is the most portable way to install it).
|
|
|
|
|
2019-01-07 18:13:37 +03:00
|
|
|
The scripts will ask you for your API ID, hash, etc. through standard input.
|
|
|
|
You can also define the following environment variables to avoid doing so:
|
2019-01-07 17:48:25 +03:00
|
|
|
|
|
|
|
* `TG_API_ID`, this is your API ID from https://my.telegram.org.
|
|
|
|
* `TG_API_HASH`, this is your API hash from https://my.telegram.org.
|
|
|
|
* `TG_TOKEN`, this is your bot token from [@BotFather] for bot examples.
|
|
|
|
* `TG_SESSION`, this is the name of the `*.session` file to use.
|
|
|
|
|
|
|
|
## Downloading Examples
|
|
|
|
|
2019-01-07 18:13:37 +03:00
|
|
|
You may download all and run any example by typing in a terminal:
|
2019-01-07 17:48:25 +03:00
|
|
|
```sh
|
|
|
|
git clone https://github.com/LonamiWebs/Telethon.git
|
|
|
|
cd Telethon
|
|
|
|
cd telethon_examples
|
|
|
|
python3 gui.py
|
|
|
|
```
|
|
|
|
|
|
|
|
You can also right-click the title of any example and use "Save Link As…" to
|
|
|
|
download only a particular example.
|
|
|
|
|
|
|
|
All examples are licensed under the [CC0 License], so you can use
|
|
|
|
them as the base for your own code without worrying about copyright.
|
|
|
|
|
|
|
|
## Available Examples
|
|
|
|
|
|
|
|
### [`print_updates.py`]
|
|
|
|
|
2019-01-07 18:13:37 +03:00
|
|
|
* Usable as: **user and bot**.
|
2019-01-07 17:48:25 +03:00
|
|
|
* Difficulty: **easy**.
|
|
|
|
|
|
|
|
Trivial example that just prints all the updates Telegram originally
|
|
|
|
sends. Your terminal should support UTF-8, or Python may fail to print
|
|
|
|
some characters on screen.
|
|
|
|
|
|
|
|
### [`print_messages.py`]
|
|
|
|
|
2019-01-07 18:13:37 +03:00
|
|
|
* Usable as: **user and bot**.
|
2019-01-07 17:48:25 +03:00
|
|
|
* Difficulty: **easy**.
|
|
|
|
|
|
|
|
This example uses the different `@client.on` syntax to register event
|
|
|
|
handlers, and uses the `pattern=` variable to filter only some messages.
|
|
|
|
|
|
|
|
There are a lot other things you can do, but you should refer to the
|
|
|
|
documentation of [`events.NewMessage`] since this is only a simple example.
|
|
|
|
|
|
|
|
### [`replier.py`]
|
|
|
|
|
2019-01-07 18:13:37 +03:00
|
|
|
* Usable as: **user and bot**.
|
2019-01-07 17:48:25 +03:00
|
|
|
* Difficulty: **easy**.
|
|
|
|
|
|
|
|
This example showcases a third way to add event handlers (using decorators
|
|
|
|
but without the client; you should use the one you prefer) and will also
|
|
|
|
reply to some messages with different reactions, or to your commands.
|
|
|
|
|
|
|
|
It also shows how to enable `logging`, which you should always do, but was
|
|
|
|
not really needed for the previous two trivial examples.
|
|
|
|
|
|
|
|
### [`assistant.py`]
|
|
|
|
|
|
|
|
* Usable as a: **bot**.
|
|
|
|
* Difficulty: **medium**.
|
|
|
|
|
|
|
|
This example is the actual bot account [@TelethonianBot] running in the
|
|
|
|
[official Telethon's chat] to help people out. The file is a bit big and
|
|
|
|
assumes some [`asyncio`] knowledge, but otherwise is easy to follow.
|
|
|
|
|
2019-05-11 21:41:10 +03:00
|
|
|
In addition, it has optional plugins, which may be useful for your own code.
|
|
|
|
The plugins can be found at https://github.com/Lonami/TelethonianBotExt and
|
|
|
|
should be cloned into a `plugins` folder next to `assistant.py` for them to
|
|
|
|
work.
|
|
|
|
|
2019-01-07 17:48:25 +03:00
|
|
|
### [`interactive_telegram_client.py`]
|
|
|
|
|
2019-01-07 18:13:37 +03:00
|
|
|
* Usable as: **user**.
|
2019-01-07 17:48:25 +03:00
|
|
|
* Difficulty: **medium**.
|
|
|
|
|
|
|
|
Interactive terminal client that you can use to list your dialogs,
|
|
|
|
send messages, delete them, and download media. The code is a bit
|
|
|
|
long which may make it harder to follow, and requires saving some
|
|
|
|
state in order for downloads to work later.
|
|
|
|
|
2019-06-27 14:55:54 +03:00
|
|
|
### [`quart_login.py`]
|
|
|
|
|
|
|
|
* Usable as: **user**.
|
|
|
|
* Difficulty: **medium**.
|
|
|
|
|
|
|
|
Web-based application using [Quart](https://pgjones.gitlab.io/quart/index.html)
|
|
|
|
(an `asyncio` alternative to [Flask](http://flask.pocoo.org/)) and Telethon
|
|
|
|
together.
|
|
|
|
|
|
|
|
The example should work as a base for Quart applications *with a single
|
|
|
|
global client*, and it should be easy to adapt for multiple clients by
|
|
|
|
following the comments in the code.
|
|
|
|
|
|
|
|
It showcases how to login manually (ask for phone, code, and login),
|
|
|
|
and once the user is logged in, some messages and photos will be shown
|
|
|
|
in the page.
|
|
|
|
|
|
|
|
There is nothing special about Quart. It was chosen because it's a
|
|
|
|
drop-in replacement for Flask, the most popular option for web-apps.
|
|
|
|
You can use any `asyncio` library with Telethon just as well,
|
|
|
|
like [Sanic](https://sanic.readthedocs.io/en/latest/index.html) or
|
|
|
|
[aiohttp](https://docs.aiohttp.org/en/stable/). You can even use Flask,
|
|
|
|
if you learn how to use `threading` and `asyncio` together.
|
|
|
|
|
2019-01-07 17:48:25 +03:00
|
|
|
### [`gui.py`]
|
|
|
|
|
2019-01-07 18:13:37 +03:00
|
|
|
* Usable as: **user and bot**.
|
2019-01-07 17:48:25 +03:00
|
|
|
* Difficulty: **high**.
|
|
|
|
|
|
|
|
This is a simple GUI written with [`tkinter`] which becomes more complicated
|
|
|
|
when there's a need to use [`asyncio`] (although it's only a bit of additional
|
|
|
|
setup). The code to deal with the interface and the commands the GUI supports
|
|
|
|
also complicate the code further and require knowledge and careful reading.
|
|
|
|
|
|
|
|
This example is the actual bot account [@TelethonianBot] running in the
|
|
|
|
[official Telethon's chat] to help people out. The file is a bit big and
|
|
|
|
assumes some [`asyncio`] knowledge, but otherwise is easy to follow.
|
|
|
|
|
|
|
|
![Screenshot of the tkinter GUI][tkinter GUI]
|
|
|
|
|
|
|
|
|
|
|
|
[Telethon]: https://github.com/LonamiWebs/Telethon
|
|
|
|
[CC0 License]: https://github.com/LonamiWebs/Telethon/blob/master/telethon_examples/LICENSE
|
|
|
|
[@BotFather]: https://t.me/BotFather
|
|
|
|
[`assistant.py`]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/assistant.py
|
2019-06-27 14:55:54 +03:00
|
|
|
[`quart_login.py`]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/quart_login.py
|
2019-01-07 17:48:25 +03:00
|
|
|
[`gui.py`]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/gui.py
|
|
|
|
[`interactive_telegram_client.py`]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/interactive_telegram_client.py
|
|
|
|
[`print_messages.py`]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/print_messages.py
|
|
|
|
[`print_updates.py`]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/print_updates.py
|
|
|
|
[`replier.py`]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/replier.py
|
|
|
|
[@TelethonianBot]: https://t.me/TelethonianBot
|
|
|
|
[official Telethon's chat]: https://t.me/TelethonChat
|
|
|
|
[`asyncio`]: https://docs.python.org/3/library/asyncio.html
|
|
|
|
[`tkinter`]: https://docs.python.org/3/library/tkinter.html
|
|
|
|
[tkinter GUI]: https://raw.githubusercontent.com/LonamiWebs/Telethon/master/telethon_examples/screenshot-gui.jpg
|
2019-05-22 12:29:46 +03:00
|
|
|
[`events.NewMessage`]: https://docs.telethon.dev/en/latest/modules/events.html#telethon.events.newmessage.NewMessage
|