Docs revamp. Part 5

This commit is contained in:
Dan 2019-05-18 01:45:01 +02:00
parent b6ea451ee5
commit 518220431e
14 changed files with 144 additions and 68 deletions

View File

@ -59,6 +59,7 @@ ground up in Python and C. It enables you to easily create custom apps for both
- **Documented**: Pyrogram API methods, types and public interfaces are well documented. - **Documented**: Pyrogram API methods, types and public interfaces are well documented.
- **Type-hinted**: Exposed Pyrogram types and method parameters are all type-hinted. - **Type-hinted**: Exposed Pyrogram types and method parameters are all type-hinted.
- **Updated**, to make use of the latest Telegram API version and features. - **Updated**, to make use of the latest Telegram API version and features.
- **Bot API-like**: Similar to the Bot API in its simplicity, but much more powerful and detailed.
- **Pluggable**: The Smart Plugin system allows to write components with minimal boilerplate code. - **Pluggable**: The Smart Plugin system allows to write components with minimal boilerplate code.
- **Comprehensive**: Execute any advanced action an official client is able to do, and even more. - **Comprehensive**: Execute any advanced action an official client is able to do, and even more.

View File

@ -14,29 +14,15 @@ Welcome to Pyrogram
<br> <br>
<a href="https://github.com/pyrogram/pyrogram"> <a href="https://github.com/pyrogram/pyrogram">
GitHub Source Code
</a> </a>
<a href="https://t.me/Pyrogram">
Community
</a>
<a href="https://github.com/pyrogram/pyrogram/releases"> <a href="https://github.com/pyrogram/pyrogram/releases">
Releases Releases
</a> </a>
<a href="https://pypi.org/project/Pyrogram"> <a href="https://t.me/Pyrogram">
PyPI Community
</a>
<br>
<a href="compiler/api/source/main_api.tl">
<img src="https://img.shields.io/badge/schema-layer%2097-eda738.svg?longCache=true&colorA=262b30"
alt="Schema Layer">
</a>
<a href="https://github.com/pyrogram/tgcrypto">
<img src="https://img.shields.io/badge/tgcrypto-v1.1.1-eda738.svg?longCache=true&colorA=262b30"
alt="TgCrypto Version">
</a> </a>
</p> </p>
@ -59,7 +45,7 @@ C. It enables you to easily create custom apps for both user and bot identities
`MTProto API`_. `MTProto API`_.
.. _Telegram: https://telegram.org .. _Telegram: https://telegram.org
.. _MTProto API: https://core.telegram.org/api#telegram-api .. _MTProto API: topics/faq#what-can-mtproto-do-more-than-the-bot-api
How the Documentation is Organized How the Documentation is Organized
---------------------------------- ----------------------------------
@ -68,11 +54,11 @@ Contents are organized into self-contained topics and can be all accessed from t
order using the Next button at the end of each page. Here below you can, instead, find a list of the most relevant order using the Next button at the end of each page. Here below you can, instead, find a list of the most relevant
pages for a quick access. pages for a quick access.
Getting Started First Steps
^^^^^^^^^^^^^^^ ^^^^^^^^^^^
- `Quick Start`_ - Overview to get you started as fast as possible. - `Quick Start`_ - Overview to get you started quickly.
- `Calling Methods`_ - How to use Pyrogram's API. - `Calling Methods`_ - How to call Pyrogram's methods.
- `Handling Updates`_ - How to handle Telegram updates. - `Handling Updates`_ - How to handle Telegram updates.
- `Error Handling`_ - How to handle API errors correctly. - `Error Handling`_ - How to handle API errors correctly.
@ -83,7 +69,8 @@ Getting Started
API Reference API Reference
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
- `Client Class`_ - Details about the Client class.
- `Client Class`_ - Reference details about the Client class.
- `Available Methods`_ - A list of available high-level methods. - `Available Methods`_ - A list of available high-level methods.
- `Available Types`_ - A list of available high-level types. - `Available Types`_ - A list of available high-level types.
- `Bound Methods`_ - A list of convenient bound methods. - `Bound Methods`_ - A list of convenient bound methods.

View File

@ -2,7 +2,7 @@ Authorization
============= =============
Once a `project is set up`_, you will still have to follow a few steps before you can actually use Pyrogram to make Once a `project is set up`_, you will still have to follow a few steps before you can actually use Pyrogram to make
API calls. This section provides all the information you need in order to authorize yourself as user or a bot. API calls. This section provides all the information you need in order to authorize yourself as user or bot.
User Authorization User Authorization
------------------ ------------------
@ -51,7 +51,7 @@ the `Bot Father`_. Bot tokens replace the users' phone numbers only — you stil
The authorization process is automatically managed. All you need to do is choose a ``session_name`` (can be anything, The authorization process is automatically managed. All you need to do is choose a ``session_name`` (can be anything,
usually your bot username) and pass your bot token using the ``bot_token`` parameter. The session file will be named usually your bot username) and pass your bot token using the ``bot_token`` parameter. The session file will be named
after the session name, which will be ``pyrogrambot.session`` for the example below. after the session name, which will be ``my_bot.session`` for the example below.
.. code-block:: python .. code-block:: python

View File

@ -55,7 +55,7 @@ Use this command to install (note "asyncio.zip" in the link):
$ pip3 install -U https://github.com/pyrogram/pyrogram/archive/asyncio.zip $ pip3 install -U https://github.com/pyrogram/pyrogram/archive/asyncio.zip
Pyrogram API remains the same and features are kept up to date from the non-async, default develop branch, but you Pyrogram's API remains the same and features are kept up to date from the non-async, default develop branch, but you
are obviously required Python asyncio knowledge in order to take full advantage of it. are obviously required Python asyncio knowledge in order to take full advantage of it.
@ -87,7 +87,7 @@ If no error shows up you are good to go.
>>> import pyrogram >>> import pyrogram
>>> pyrogram.__version__ >>> pyrogram.__version__
'0.12.0' '0.13.0'
.. _TgCrypto: ../topics/tgcrypto .. _TgCrypto: ../topics/tgcrypto
.. _`Github repo`: http://github.com/pyrogram/pyrogram .. _`Github repo`: http://github.com/pyrogram/pyrogram

View File

@ -1,7 +1,8 @@
Quick Start Quick Start
=========== ===========
The next few steps serve as a quick start for all new Pyrogrammers that want to get something done as fast as possible! The next few steps serve as a quick start for all new Pyrogrammers that want to get something done as fast as possible.
Let's go!
Get Pyrogram Real Fast Get Pyrogram Real Fast
---------------------- ----------------------

View File

@ -11,8 +11,9 @@ to control the behaviour of your application. Pyrogram errors all live inside th
RPCError RPCError
-------- --------
The father of all errors is named ``RPCError``. This error exists in form of a Python exception and is able to catch all The father of all errors is named ``RPCError``. This error exists in form of a Python exception which is directly
Telegram API related errors. subclass-ed from Python's main ``Exception`` and is able to catch all Telegram API related errors. This error is raised
every time a method call against Telegram's API was unsuccessful.
.. code-block:: python .. code-block:: python
@ -27,7 +28,7 @@ Error Categories
---------------- ----------------
The ``RPCError`` packs together all the possible errors Telegram could raise, but to make things tidier, Pyrogram The ``RPCError`` packs together all the possible errors Telegram could raise, but to make things tidier, Pyrogram
provides categories of errors, which are named after the common HTTP errors: provides categories of errors, which are named after the common HTTP errors and subclass-ed from the RPCError:
.. code-block:: python .. code-block:: python
@ -41,6 +42,32 @@ provides categories of errors, which are named after the common HTTP errors:
- `420 - Flood <../api/errors#flood>`_ - `420 - Flood <../api/errors#flood>`_
- `500 - InternalServerError <../api/errors#internalservererror>`_ - `500 - InternalServerError <../api/errors#internalservererror>`_
Single Errors
-------------
For a fine-grained control over every single error, Pyrogram does also expose errors that deal each with a specific
issue. For example:
.. code-block:: python
from pyrogram.errors import FloodWait
These errors subclass directly from the category of errors they belong to, which in turn subclass from the father
RPCError, thus building a class of error hierarchy such as this:
- RPCError
- BadRequest
- ``MessageEmpty``
- ``UsernameOccupied``
- ``...``
- InternalServerError
- ``RpcCallFail``
- ``InterDcCallError``
- ``...``
- ``...``
.. _Errors: api/errors
Unknown Errors Unknown Errors
-------------- --------------

View File

@ -36,7 +36,7 @@ Now instantiate a new Client object, "my_account" is a session name of your choi
app = Client("my_account") app = Client("my_account")
To actually make use of any method, the client has to be started: To actually make use of any method, the client has to be started first:
.. code-block:: python .. code-block:: python

View File

@ -9,11 +9,11 @@ Defining Updates
First, let's define what are these updates. As hinted already, updates are simply events that happen in your Telegram First, let's define what are these updates. As hinted already, updates are simply events that happen in your Telegram
account (incoming messages, new members join, bot button presses, etc...), which are meant to notify you about a new account (incoming messages, new members join, bot button presses, etc...), which are meant to notify you about a new
specific state that changed. These updates are handled by registering one or more callback functions in your app using specific state that has changed. These updates are handled by registering one or more callback functions in your app
`Handlers <../api/handlers>`_. using `Handlers <../api/handlers>`_.
Each handler deals with a specific event and once a matching update arrives from Telegram, your registered callback Each handler deals with a specific event and once a matching update arrives from Telegram, your registered callback
function will be called and its body executed. function will be called back by the framework and its body executed.
Registering an Handler Registering an Handler
---------------------- ----------------------
@ -63,8 +63,8 @@ above must only handle updates that are in form of a :obj:`Message <pyrogram.Mes
my_handler = MessageHandler(my_function) my_handler = MessageHandler(my_function)
Third: the method :meth:`add_handler() <pyrogram.Client.add_handler>`. This method is used to actually register the Third: the method :meth:`add_handler() <pyrogram.Client.add_handler>`. This method is used to actually register the
handler and let Pyrogram know it needs to be taken into consideration when new updates arrive and the dispatching phase handler and let Pyrogram know it needs to be taken into consideration when new updates arrive and the internal
begins. dispatching phase begins.
.. code-block:: python .. code-block:: python
@ -109,4 +109,4 @@ to do so is by decorating your callback function with the :meth:`on_message() <p
``my_function[0].callback``, that is, the *callback* field of the *handler* object which is the first element in the ``my_function[0].callback``, that is, the *callback* field of the *handler* object which is the first element in the
tuple, accessed by bracket notation *[0]*. tuple, accessed by bracket notation *[0]*.
.. _API methods: usage.html .. _API methods: invoking

View File

@ -3,9 +3,14 @@ Pyrogram FAQ
This FAQ page provides answers to common questions about Pyrogram and, to some extent, Telegram in general. This FAQ page provides answers to common questions about Pyrogram and, to some extent, Telegram in general.
.. tip::
If you think something interesting could be added here, feel free to propose it by opening a `Feature Request`_.
.. contents:: Contents .. contents:: Contents
:backlinks: none :backlinks: none
:local: :local:
:depth: 1
What is Pyrogram? What is Pyrogram?
----------------- -----------------
@ -41,6 +46,7 @@ Why Pyrogram?
- **Documented**: Pyrogram API methods, types and public interfaces are well documented. - **Documented**: Pyrogram API methods, types and public interfaces are well documented.
- **Type-hinted**: Exposed Pyrogram types and method parameters are all type-hinted. - **Type-hinted**: Exposed Pyrogram types and method parameters are all type-hinted.
- **Updated**, to make use of the latest Telegram API version and features. - **Updated**, to make use of the latest Telegram API version and features.
- **Bot API-like**: Similar to the Bot API in its simplicity, but much more powerful and detailed.
- **Pluggable**: The `Smart Plugin`_ system allows to write components with minimal boilerplate code. - **Pluggable**: The `Smart Plugin`_ system allows to write components with minimal boilerplate code.
- **Comprehensive**: Execute any `advanced action`_ an official client is able to do, and even more. - **Comprehensive**: Execute any `advanced action`_ an official client is able to do, and even more.
@ -51,23 +57,41 @@ Why Pyrogram?
What can MTProto do more than the Bot API? What can MTProto do more than the Bot API?
------------------------------------------ ------------------------------------------
- Authorize both user and bot identities. Here you can find a list of all the known advantages in using MTProto-based libraries (Pyrogram) instead of the official
- Upload & download any file, up to 1500 MB each. HTTP Bot API:
- Has less overhead due to direct connections to the actual Telegram servers.
- Run multiple sessions at once, up to 10 per account (either bot or user). - **Authorize both user and bot identities**: The Bot API only allows bot accounts.
- Get information about any public chat by usernames, even if not a member.
- Obtain information about any message existing in a chat using message ids. - **Upload & download any file, up to 1500 MB each (~1.5 GB)**: The Bot API allows uploads and downloads of files only
- retrieve the whole chat members list of either public or private chats. up to 50 MB / 20 MB in size (respectively).
- Receive extra updates, such as the one about a user name change.
- More meaningful errors in case something went wrong. - **Has less overhead due to direct connections to Telegram**: The Bot API uses an intermediate server to handle HTTP
- Get API version updates, and thus new features, sooner. requests before they are sent to the actual Telegram servers.
- **Run multiple sessions at once, up to 10 per account (either bot or user)**: The Bot API intermediate server will
terminate any other session in case you try to use the same bot again in a parallel connection.
- **Get information about any public chat by usernames, even if not a member**: The Bot API simply doesn't support this.
- **Obtain information about any message existing in a chat using their ids**: The Bot API simply doesn't support this.
- **Retrieve the whole chat members list of either public or private chats**: The Bot API simply doesn't support this.
- **Receive extra updates, such as the one about a user name change**: The Bot API simply doesn't support this.
- **Has more meaningful errors in case something went wrong**: The Bot API reports less detailed errors.
- **Has much more detailed types and powerful methods**: The Bot API types often miss some useful information about
Telegram's type and some of the methods are limited as well.
- **Get API version updates, and thus new features, sooner**: The Bot API is simply slower in implementing new features.
Why do I need an API key for bots? Why do I need an API key for bots?
---------------------------------- ----------------------------------
Requests against the official bot API endpoint are made via JSON/HTTP, but are handled by a backend application that Requests against the official bot API endpoint are made via JSON/HTTP, but are handled by an intermediate server
implements the MTProto protocol -- just like Pyrogram -- and uses its own API key, which is always required, but hidden application that implements the MTProto protocol -- just like Pyrogram -- and uses its own API key, which is always
to the public. required, but hidden to the public.
.. figure:: https://i.imgur.com/C108qkX.png .. figure:: https://i.imgur.com/C108qkX.png
:align: center :align: center
@ -76,9 +100,7 @@ Using MTProto is the only way to communicate with the actual Telegram servers, a
identify applications by means of a unique key; the bot token identifies a bot as a user and replaces the user's phone identify applications by means of a unique key; the bot token identifies a bot as a user and replaces the user's phone
number only. number only.
Why is the main API (MTProto) superiod I started a client and nothing happens!
I started a client but nothing happens!
--------------------------------------- ---------------------------------------
If you are connecting from Russia, China or Iran `you need a proxy`_, because Telegram could be partially or If you are connecting from Russia, China or Iran `you need a proxy`_, because Telegram could be partially or
@ -93,6 +115,15 @@ in a bunch of seconds:
import logging import logging
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
Another way to confirm you aren't able to connect to Telegram is by pinging these IP addresses and see whether ping
fails or not:
- DC1: ``149.154.175.50``
- DC2: ``149.154.167.51``
- DC3: ``149.154.175.100``
- DC4: ``149.154.167.91``
- DC5: ``91.108.56.149``
|bug report| |bug report|
.. _you need a proxy: proxy .. _you need a proxy: proxy
@ -114,7 +145,16 @@ things:
**Note:** If you really believe this should not happen, kindly open a `Bug Report`_. **Note:** If you really believe this should not happen, kindly open a `Bug Report`_.
.. _Bug Report: https://github.com/pyrogram/pyrogram/issues/new?labels=bug&template=bug_report.md Can I use the same file_id across different accounts?
-----------------------------------------------------
No, Telegram doesn't allow this.
File ids are bound to a specific user/bot, and an attempt in using a foreign file id will result in errors such as
**[400 MEDIA_EMPTY]: The media is invalid**.
The only exception are stickers' file ids; you can use them across different accounts without any problem, like this
one: ``CAADBAADyg4AAvLQYAEYD4F7vcZ43AI``.
My account has been deactivated/limited! My account has been deactivated/limited!
---------------------------------------- ----------------------------------------
@ -151,3 +191,6 @@ for free under LGPLv3+.
In other words: you can use and integrate Pyrogram into your own code --- either open source, under the same or a In other words: you can use and integrate Pyrogram into your own code --- either open source, under the same or a
different licence or even proprietary --- without being required to release the source code of your own applications. different licence or even proprietary --- without being required to release the source code of your own applications.
However, any modifications to the library itself are required to be published for free under the same LGPLv3+ license. However, any modifications to the library itself are required to be published for free under the same LGPLv3+ license.
.. _Bug Report: https://github.com/pyrogram/pyrogram/issues/new?labels=bug&template=bug_report.md
.. _Feature Request: https://github.com/pyrogram/pyrogram/issues/new?labels=enhancement&template=feature_request.md

View File

@ -2,7 +2,12 @@ Pyrogram Glossary
----------------- -----------------
This page contains a list of common words with brief explanations related to Pyrogram and, to some extent, Telegram in This page contains a list of common words with brief explanations related to Pyrogram and, to some extent, Telegram in
general. general. Some words may as well link to dedicated articles in case the topic is covered in a more detailed fashion.
.. tip::
If you think something interesting could be added here, feel free to propose it by opening a `Feature Request`_.
.. glossary:: .. glossary::
@ -14,6 +19,18 @@ general.
A secret code used to authenticate and/or authorize a specific application to Telegram in order for it to A secret code used to authenticate and/or authorize a specific application to Telegram in order for it to
control how the API is being used, for example, to prevent abuses of the API. control how the API is being used, for example, to prevent abuses of the API.
DC
Also known as *data center*, is a place where lots of computer systems are housed and used together in order to
achieve high quality and availability for services.
RPC
Acronym for Remote Procedure call, that is, a function which gets executed at some remote place (i.e. Telegram
server) and not in your local.
RPCError
An error caused by an RPC which must be returned in place of the successful result in order to let the caller
know something went wrong.
MTProto MTProto
The name of the custom-made, open encryption protocol by Telegram, implemented in Pyrogram. The name of the custom-made, open encryption protocol by Telegram, implemented in Pyrogram.
@ -51,3 +68,5 @@ general.
.. _Telegram Bot API: https://core.telegram.org/bots/api .. _Telegram Bot API: https://core.telegram.org/bots/api
.. _handling updates: ../start/updates .. _handling updates: ../start/updates
.. _Feature Request: https://github.com/pyrogram/pyrogram/issues/new?labels=enhancement&template=feature_request.md

View File

@ -8,16 +8,16 @@ Briefly explaining, sessions are simply new logins in your account. They can be
app (or by invoking `GetAuthorizations <../telegram/functions/account/GetAuthorizations.html>`_ with Pyrogram). They app (or by invoking `GetAuthorizations <../telegram/functions/account/GetAuthorizations.html>`_ with Pyrogram). They
store some useful information such as the client who's using them and from which country and IP address. store some useful information such as the client who's using them and from which country and IP address.
.. figure:: https://i.imgur.com/lzGPCdZ.png .. figure:: https://i.imgur.com/YaqtMLO.png
:width: 70% :width: 90%
:align: center :align: center
**A Pyrogram session running on Linux, Python 3.6.** **A Pyrogram session running on Linux, Python 3.7.**
That's how a session looks like on the Android app, showing the three main pieces of information. That's how a session looks like on the Android app, showing the three main pieces of information.
- ``app_version``: **Pyrogram 🔥 0.7.5** - ``app_version``: **Pyrogram 0.13.0**
- ``device_model``: **CPython 3.6.5** - ``device_model``: **CPython 3.7.2**
- ``system_version``: **Linux 4.15.0-23-generic** - ``system_version``: **Linux 4.15.0-23-generic**
Set Custom Values Set Custom Values

View File

@ -26,9 +26,7 @@ if sys.version_info[:3] in [(3, 5, 0), (3, 5, 1), (3, 5, 2)]:
__version__ = "0.13.0.develop" __version__ = "0.13.0.develop"
__license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)" __license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)"
__copyright__ = "Copyright (C) 2017-2019 Dan Tès <https://github.com/delivrance>".replace( __copyright__ = "Copyright (C) 2017-2019 Dan <https://github.com/delivrance>"
"\xe8", "e" if sys.getfilesystemencoding() != "utf-8" else "\xe8"
)
from .errors import RPCError from .errors import RPCError
from .client import * from .client import *

View File

@ -78,7 +78,7 @@ class Client(Methods, BaseClient):
This is an alternative way to pass it if you don't want to use the *config.ini* file. This is an alternative way to pass it if you don't want to use the *config.ini* file.
app_version (``str``, *optional*): app_version (``str``, *optional*):
Application version. Defaults to "Pyrogram :fire: vX.Y.Z" Application version. Defaults to "Pyrogram X.Y.Z"
This is an alternative way to set it if you don't want to use the *config.ini* file. This is an alternative way to set it if you don't want to use the *config.ini* file.
device_model (``str``, *optional*): device_model (``str``, *optional*):

View File

@ -31,7 +31,7 @@ class BaseClient:
class StopTransmission(StopIteration): class StopTransmission(StopIteration):
pass pass
APP_VERSION = "Pyrogram \U0001f525 {}".format(__version__) APP_VERSION = "Pyrogram {}".format(__version__)
DEVICE_MODEL = "{} {}".format( DEVICE_MODEL = "{} {}".format(
platform.python_implementation(), platform.python_implementation(),