From 8c8288412fc80552f7a001d77d9afac905d81fc7 Mon Sep 17 00:00:00 2001
From: Dan <14043624+delivrance@users.noreply.github.com>
Date: Fri, 7 Jan 2022 10:18:51 +0100
Subject: [PATCH] Various improvements
---
.github/FUNDING.yml | 3 +-
.github/ISSUE_TEMPLATE/bug_report.md | 2 +-
.github/ISSUE_TEMPLATE/config.yml | 6 +-
.github/ISSUE_TEMPLATE/feature_request.md | 2 +-
README.md | 60 ++-
compiler/docs/compiler.py | 8 +
compiler/docs/template/bound-methods.rst | 7 +-
compiler/docs/template/methods.rst | 7 +-
compiler/docs/template/types.rst | 1 -
compiler/errors/source/400_BAD_REQUEST.tsv | 3 +-
compiler/errors/source/401_UNAUTHORIZED.tsv | 2 +-
docs/README.md | 8 -
docs/requirements.txt | 4 +-
docs/robots.txt | 7 -
docs/scripts/releases.py | 84 ----
docs/scripts/sitemap.py | 81 ----
docs/source/_images/favicon.ico | Bin 16958 -> 0 bytes
docs/source/_images/pyrogram.png | Bin 48928 -> 0 bytes
docs/source/api/client.rst | 1 -
docs/source/api/decorators.rst | 4 -
docs/source/api/handlers.rst | 1 -
docs/source/conf.py | 28 +-
docs/source/faq.rst | 407 ------------------
.../client-started-but-nothing-happens.rst | 11 +
...alling-stop-restart-add-remove-handler.rst | 12 +
docs/source/faq/how-to-avoid-flood-waits.rst | 23 +
docs/source/faq/how-to-use-webhooks.rst | 9 +
docs/source/faq/index.rst | 47 ++
...ing-the-account-to-another-data-center.rst | 10 +
docs/source/faq/peer-id-invalid-error.rst | 14 +
...-raised-exception-oserror-timeouterror.rst | 10 +
...interfaceerror-error-binding-parameter.rst | 13 +
...e3-operationalerror-database-is-locked.rst | 17 +
...e-account-has-been-limited-deactivated.rst | 16 +
.../unicodeencodeerror-codec-cant-encode.rst | 7 +
...h-urls-gives-error-webpage-curl-failed.rst | 7 +
...le-clients-at-once-on-the-same-account.rst | 7 +
...same-file-id-across-different-accounts.rst | 6 +
...-ip-addresses-of-telegram-data-centers.rst | 30 ++
.../why-is-the-api-key-needed-for-bots.rst | 12 +
...eacting-slowly-in-supergroups-channels.rst | 18 +
...-event-handler-triggered-twice-or-more.rst | 28 ++
docs/source/glossary.rst | 86 ----
docs/source/index.rst | 65 +--
docs/source/intro/install.rst | 18 +-
docs/source/intro/quickstart.rst | 35 +-
docs/source/intro/setup.rst | 24 +-
docs/source/license.rst | 16 -
docs/source/start/auth.rst | 21 +-
docs/source/start/errors.rst | 13 +-
docs/source/start/examples/bot_keyboards.rst | 4 +-
docs/source/start/examples/echobot.rst | 2 +-
docs/source/start/examples/hello_world.rst | 6 -
docs/source/start/examples/inline_queries.rst | 2 -
.../source/start/examples/use_inline_bots.rst | 4 +-
docs/source/start/examples/welcomebot.rst | 2 +-
docs/source/start/invoking.rst | 105 ++---
docs/source/start/updates.rst | 52 +--
docs/source/support.rst | 78 ++--
docs/source/topics/advanced-usage.rst | 69 ++-
docs/source/topics/bots-interaction.rst | 50 ---
...ssion-settings.rst => client-settings.rst} | 26 +-
docs/source/topics/config-file.rst | 4 +-
docs/source/topics/create-filters.rst | 2 +-
docs/source/topics/debugging.rst | 68 ++-
docs/source/topics/more-on-updates.rst | 1 -
docs/source/topics/mtproto-vs-botapi.rst | 33 +-
docs/source/topics/scheduling.rst | 4 +-
docs/source/topics/serializing.rst | 5 +-
docs/source/topics/smart-plugins.rst | 40 +-
docs/source/topics/storage-engines.rst | 38 +-
docs/source/topics/test-servers.rst | 17 +-
docs/source/topics/text-formatting.rst | 26 +-
docs/source/topics/tgcrypto.rst | 19 +-
docs/source/topics/use-filters.rst | 10 +-
docs/source/topics/voice-calls.rst | 4 +-
pyrogram/client.py | 20 +-
.../connection/transport/tcp/tcp_abridged.py | 1 -
pyrogram/connection/transport/tcp/tcp_full.py | 2 +-
.../transport/tcp/tcp_intermediate.py | 2 +-
.../transport/tcp/tcp_intermediate_o.py | 2 +-
pyrogram/errors/rpc_error.py | 2 +-
pyrogram/filters.py | 9 -
pyrogram/methods/bots/__init__.py | 2 +-
pyrogram/methods/chats/get_chat_member.py | 4 +-
pyrogram/methods/chats/get_chat_members.py | 18 +-
.../methods/chats/get_chat_members_count.py | 2 +-
pyrogram/methods/chats/iter_chat_members.py | 72 ++--
.../methods/chats/set_administrator_title.py | 2 +-
pyrogram/methods/chats/set_slow_mode.py | 4 +-
pyrogram/methods/contacts/add_contact.py | 2 +-
pyrogram/methods/contacts/import_contacts.py | 6 +-
pyrogram/methods/messages/copy_media_group.py | 5 +-
pyrogram/methods/messages/download_media.py | 2 +-
pyrogram/methods/messages/forward_messages.py | 1 -
pyrogram/methods/messages/get_history.py | 6 +-
.../methods/messages/get_history_count.py | 2 +-
pyrogram/methods/messages/get_media_group.py | 4 +-
pyrogram/methods/messages/get_messages.py | 4 +-
pyrogram/methods/messages/read_history.py | 4 +-
pyrogram/methods/messages/search_global.py | 10 +-
pyrogram/methods/messages/search_messages.py | 16 +-
pyrogram/methods/messages/send_animation.py | 2 +-
pyrogram/methods/messages/send_audio.py | 5 +-
.../methods/messages/send_cached_media.py | 2 +-
pyrogram/methods/messages/send_contact.py | 2 +-
pyrogram/methods/messages/send_dice.py | 6 +-
pyrogram/methods/messages/send_document.py | 2 +-
pyrogram/methods/messages/send_media_group.py | 2 +-
pyrogram/methods/messages/send_message.py | 5 +-
pyrogram/methods/messages/send_sticker.py | 2 +-
pyrogram/methods/messages/send_video.py | 2 +-
pyrogram/methods/messages/send_voice.py | 2 +-
pyrogram/methods/users/get_common_chats.py | 2 +-
pyrogram/methods/users/get_profile_photos.py | 6 +-
.../methods/users/get_profile_photos_count.py | 2 +-
pyrogram/methods/users/get_users.py | 2 +-
pyrogram/methods/users/iter_profile_photos.py | 2 +-
pyrogram/methods/utilities/add_handler.py | 1 -
.../utilities/export_session_string.py | 1 -
pyrogram/methods/utilities/idle.py | 1 -
pyrogram/methods/utilities/remove_handler.py | 1 -
pyrogram/methods/utilities/restart.py | 1 -
pyrogram/methods/utilities/run.py | 5 +-
pyrogram/methods/utilities/start.py | 1 -
pyrogram/methods/utilities/stop.py | 1 -
.../methods/utilities/stop_transmission.py | 3 +-
pyrogram/raw/core/primitives/vector.py | 2 +-
pyrogram/session/session.py | 8 -
pyrogram/types/bots_and_keyboards/__init__.py | 2 +-
pyrogram/types/inline_mode/__init__.py | 2 +-
pyrogram/types/messages_and_media/message.py | 2 +-
.../messages_and_media/message_entity.py | 2 +-
pyrogram/types/user_and_chats/chat.py | 4 +-
setup.py | 5 +-
135 files changed, 842 insertions(+), 1422 deletions(-)
delete mode 100644 docs/README.md
delete mode 100644 docs/robots.txt
delete mode 100644 docs/scripts/releases.py
delete mode 100644 docs/scripts/sitemap.py
delete mode 100644 docs/source/_images/favicon.ico
delete mode 100644 docs/source/_images/pyrogram.png
delete mode 100644 docs/source/faq.rst
create mode 100644 docs/source/faq/client-started-but-nothing-happens.rst
create mode 100644 docs/source/faq/code-hangs-when-calling-stop-restart-add-remove-handler.rst
create mode 100644 docs/source/faq/how-to-avoid-flood-waits.rst
create mode 100644 docs/source/faq/how-to-use-webhooks.rst
create mode 100644 docs/source/faq/index.rst
create mode 100644 docs/source/faq/migrating-the-account-to-another-data-center.rst
create mode 100644 docs/source/faq/peer-id-invalid-error.rst
create mode 100644 docs/source/faq/socket-send-raised-exception-oserror-timeouterror.rst
create mode 100644 docs/source/faq/sqlite3-interfaceerror-error-binding-parameter.rst
create mode 100644 docs/source/faq/sqlite3-operationalerror-database-is-locked.rst
create mode 100644 docs/source/faq/the-account-has-been-limited-deactivated.rst
create mode 100644 docs/source/faq/unicodeencodeerror-codec-cant-encode.rst
create mode 100644 docs/source/faq/uploading-with-urls-gives-error-webpage-curl-failed.rst
create mode 100644 docs/source/faq/using-multiple-clients-at-once-on-the-same-account.rst
create mode 100644 docs/source/faq/using-the-same-file-id-across-different-accounts.rst
create mode 100644 docs/source/faq/what-are-the-ip-addresses-of-telegram-data-centers.rst
create mode 100644 docs/source/faq/why-is-the-api-key-needed-for-bots.rst
create mode 100644 docs/source/faq/why-is-the-client-reacting-slowly-in-supergroups-channels.rst
create mode 100644 docs/source/faq/why-is-the-event-handler-triggered-twice-or-more.rst
delete mode 100644 docs/source/glossary.rst
delete mode 100644 docs/source/license.rst
delete mode 100644 docs/source/topics/bots-interaction.rst
rename docs/source/topics/{session-settings.rst => client-settings.rst} (54%)
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 13e0071e..19d0cd78 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,2 +1,3 @@
github: delivrance
-custom: https://docs.pyrogram.org/support
+liberapay: delivrance
+open_collective: pyrogram
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 7efd4ca1..e3bc5909 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,6 +1,6 @@
---
name: Bug Report
-about: Create a bug report affecting the library or the documentation
+about: Create a bug report affecting the framework or the documentation
---
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 37e0cd33..453151d8 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -2,7 +2,7 @@ blank_issues_enabled: false
contact_links:
- name: Ask Pyrogram related questions
url: https://stackoverflow.com/questions/tagged/pyrogram
- about: This place is for issues about Pyrogram. If you'd like to ask a question, please do so at StackOverflow.
- - name: Join the Telegram community
+ about: This place is only for reporting issues about Pyrogram. You can ask questions at StackOverflow.
+ - name: Join the Telegram channel
url: https://t.me/pyrogram
- about: Join the official channel to stay tuned for news and updates.
\ No newline at end of file
+ about: Join the official channel and stay tuned for news, updates and announcements.
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 854db44d..bf5e6a21 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -7,7 +7,7 @@ labels: "enhancement"
## Checklist
-- [ ] I believe the idea is awesome and would benefit the library.
+- [ ] I believe the idea is awesome and would benefit the framework.
- [ ] I have searched in the issue tracker for similar requests, including closed ones.
## Description
diff --git a/README.md b/README.md
index f8c4432e..e51ee0eb 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-
+
Telegram MTProto API Framework for Python
@@ -9,17 +9,19 @@
Documentation
•
-
+
Releases
•
-
- Community
+
+ News
## Pyrogram
+> Elegant, modern and asynchronous Telegram MTProto API framework in Python for users and bots
+
``` python
from pyrogram import Client, filters
@@ -28,34 +30,33 @@ app = Client("my_account")
@app.on_message(filters.private)
async def hello(client, message):
- await message.reply_text(f"Hello {message.from_user.mention}")
+ await message.reply("Hello from Pyrogram!")
app.run()
```
-**Pyrogram** is a modern, elegant and easy-to-use [Telegram](https://telegram.org/) client library framework written
-from the ground up in Python and C. It enables you to easily create custom Telegram client applications for both user
-and bot identities (bot API alternative) via the [MTProto API](https://docs.pyrogram.org/topics/mtproto-vs-botapi).
+**Pyrogram** is a modern, elegant and asynchronous [MTProto API](https://docs.pyrogram.org/topics/mtproto-vs-botapi)
+framework. It enables you to easily interact with the main Telegram API through a user account (custom client) or a bot
+identity (bot API alternative) using Python.
-### Features
+### Support
-- **Easy**: You can install Pyrogram with pip and start building your applications right away.
-- **Elegant**: Low-level details are abstracted and re-presented in a much nicer and easier way.
-- **Fast**: Crypto parts are boosted up by [TgCrypto](https://github.com/pyrogram/tgcrypto), a high-performance library
- written in pure C.
-- **Asynchronous**: Allows both synchronous and asynchronous models to fit all usage needs.
-- **Documented**: API methods, types and public interfaces are all [well documented](https://docs.pyrogram.org).
+If you'd like to support Pyrogram, you can consider:
+
+- [Become a GitHub sponsor](https://github.com/sponsors/delivrance).
+- [Become a LiberaPay patron](https://liberapay.com/delivrance).
+- [Become an OpenCollective backer](https://opencollective.com/pyrogram>).
+
+### Key Features
+
+- **Ready**: Install Pyrogram with pip and start building your applications right away.
+- **Easy**: Makes the Telegram API simple and intuitive, while still allowing advanced usages.
+- **Elegant**: Low-level details are abstracted and re-presented in a more convenient way.
+- **Fast**: Boosted up by [TgCrypto](https://github.com/pyrogram/tgcrypto), a high-performance crypto library written in pure C.
- **Type-hinted**: Types and methods are all type-hinted, enabling excellent editor support.
-- **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.
-- **Comprehensive**: Execute any advanced action an official client is able to do, and even more.
-
-### Requirements
-
-- Python 3.6 or higher.
-- A [Telegram API key](https://docs.pyrogram.org/intro/setup#api-keys).
+- **Async**: Fully asynchronous (also usable synchronously if wanted, for convenience).
+- **Powerful**: Full access to Telegram's API to execute any official client action and more.
### Installing
@@ -65,11 +66,6 @@ pip3 install pyrogram
### Resources
-- The docs contain lots of resources to help you get started with Pyrogram: https://docs.pyrogram.org.
-- Seeking extra help? Come join and ask our community: https://t.me/pyrogram.
-- For other kind of inquiries, you can send a [message](https://t.me/haskell) or an [e-mail](mailto:dan@pyrogram.org).
-
-### Copyright & License
-
-- Copyright (C) 2017-2021 Dan <>
-- Licensed under the terms of the [GNU Lesser General Public License v3 or later (LGPLv3+)](COPYING.lesser)
+- Check out the docs at https://docs.pyrogram.org to learn more about Pyrogram, get started right
+away and discover more in-depth material for building your client applications.
+- Join the official channel at https://t.me/pyrogram and stay tuned for news, updates and announcements.
diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py
index 6dd8adf4..65f67436 100644
--- a/compiler/docs/compiler.py
+++ b/compiler/docs/compiler.py
@@ -158,6 +158,7 @@ def pyrogram_api():
send_venue
send_contact
send_cached_media
+ send_reaction
edit_message_text
edit_message_caption
edit_message_media
@@ -180,7 +181,9 @@ def pyrogram_api():
retract_vote
send_dice
search_messages
+ search_messages_count
search_global
+ search_global_count
download_media
get_discussion_message
""",
@@ -284,6 +287,7 @@ def pyrogram_api():
send_game
set_game_score
get_game_high_scores
+ set_bot_commands
""",
authorization="""
Authorization
@@ -360,6 +364,7 @@ def pyrogram_api():
ChatEvent
ChatEventFilter
ChatMemberUpdated
+ ChatJoinRequest
Dialog
Restriction
""",
@@ -384,6 +389,7 @@ def pyrogram_api():
Poll
PollOption
Dice
+ Reaction
VoiceChatScheduled
VoiceChatStarted
VoiceChatEnded
@@ -420,6 +426,8 @@ def pyrogram_api():
InlineQueryResultArticle
InlineQueryResultPhoto
InlineQueryResultAnimation
+ InlineQueryResultAudio
+ InlineQueryResultVideo
ChosenInlineResult
""",
input_message_content="""
diff --git a/compiler/docs/template/bound-methods.rst b/compiler/docs/template/bound-methods.rst
index 13a51b04..ebaa2ab8 100644
--- a/compiler/docs/template/bound-methods.rst
+++ b/compiler/docs/template/bound-methods.rst
@@ -1,12 +1,11 @@
Bound Methods
=============
-Some Pyrogram types define what are called bound methods. Bound methods are functions attached to a class which are
-accessed via an instance of that class. They make it even easier to call specific methods by automatically inferring
+Some Pyrogram types define what are called bound methods. Bound methods are functions attached to a type which are
+accessed via an instance of that type. They make it even easier to call specific methods by automatically inferring
some of the required arguments.
.. code-block:: python
- :emphasize-lines: 8
from pyrogram import Client
@@ -15,7 +14,7 @@ some of the required arguments.
@app.on_message()
def hello(client, message)
- message.reply_text("hi")
+ message.reply("hi")
app.run()
diff --git a/compiler/docs/template/methods.rst b/compiler/docs/template/methods.rst
index dc2950dc..794e657e 100644
--- a/compiler/docs/template/methods.rst
+++ b/compiler/docs/template/methods.rst
@@ -1,18 +1,17 @@
Available Methods
=================
-This page is about Pyrogram methods. All the methods listed here are bound to a :class:`~pyrogram.Client` instance,
-except for :meth:`~pyrogram.idle()`, which is a special function that can be found in the main package directly.
+This page is about Pyrogram methods. All the methods listed here are bound to a :class:`~pyrogram.Client` instance.
+Some other utility functions can instead be found in the main package directly.
.. code-block:: python
- :emphasize-lines: 6
from pyrogram import Client
app = Client("my_account")
with app:
- app.send_message("haskell", "hi")
+ app.send_message("me", "hi")
.. contents:: Contents
:backlinks: none
diff --git a/compiler/docs/template/types.rst b/compiler/docs/template/types.rst
index 8b340006..2651c355 100644
--- a/compiler/docs/template/types.rst
+++ b/compiler/docs/template/types.rst
@@ -6,7 +6,6 @@ Unless required as argument to a client method, most of the types don't need to
are only returned by other methods. You also don't need to import them, unless you want to type-hint your variables.
.. code-block:: python
- :emphasize-lines: 1
from pyrogram.types import User, Message, ...
diff --git a/compiler/errors/source/400_BAD_REQUEST.tsv b/compiler/errors/source/400_BAD_REQUEST.tsv
index 1b12472c..d6754027 100644
--- a/compiler/errors/source/400_BAD_REQUEST.tsv
+++ b/compiler/errors/source/400_BAD_REQUEST.tsv
@@ -62,6 +62,7 @@ CHAT_NOT_MODIFIED The chat settings (title, permissions, photo, etc..) were not
CHAT_RESTRICTED The chat is restricted and cannot be used
CHAT_SEND_INLINE_FORBIDDEN You cannot use inline bots to send messages in this chat
CHAT_TITLE_EMPTY The chat title is empty
+CHAT_TOO_BIG The chat is too big for this action
CODE_EMPTY The provided code is empty
CODE_HASH_INVALID The provided code hash invalid
CODE_INVALID The provided code is invalid (i.e. from email)
@@ -347,4 +348,4 @@ WEBDOCUMENT_URL_EMPTY The web document URL is empty
WEBDOCUMENT_URL_INVALID The web document URL is invalid
WEBPAGE_CURL_FAILED Telegram server could not fetch the provided URL
WEBPAGE_MEDIA_EMPTY The URL doesn't contain any valid media
-YOU_BLOCKED_USER You blocked this user
+YOU_BLOCKED_USER You blocked this user
\ No newline at end of file
diff --git a/compiler/errors/source/401_UNAUTHORIZED.tsv b/compiler/errors/source/401_UNAUTHORIZED.tsv
index 1bb07b89..32e0265f 100644
--- a/compiler/errors/source/401_UNAUTHORIZED.tsv
+++ b/compiler/errors/source/401_UNAUTHORIZED.tsv
@@ -2,7 +2,7 @@ id message
ACTIVE_USER_REQUIRED The method is only available to already activated users
AUTH_KEY_INVALID The key is invalid
AUTH_KEY_PERM_EMPTY The method is unavailable for temporary authorization key, not bound to permanent
-AUTH_KEY_UNREGISTERED The key is not registered in the system
+AUTH_KEY_UNREGISTERED The key is not registered in the system. Delete your session file and login again
SESSION_EXPIRED The authorization has expired
SESSION_PASSWORD_NEEDED The two-step verification is enabled and a password is required
SESSION_REVOKED The authorization has been invalidated, because of the user terminating all sessions
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index 680e2cf4..00000000
--- a/docs/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Pyrogram Docs
-
-- Install requirements.
-- Install `pandoc` and `latexmk`.
-- HTML: `make html`
-- PDF: `make latexpdf`
-
-TODO: Explain better
\ No newline at end of file
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 2cfd5679..f83e673d 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,6 +1,6 @@
sphinx
-sphinx_rtd_theme
+sphinx_rtd_theme==1.0.0
sphinx_copybutton
pypandoc
requests
-sphinx-autobuild
\ No newline at end of file
+sphinx-autobuild
diff --git a/docs/robots.txt b/docs/robots.txt
deleted file mode 100644
index 3e416f24..00000000
--- a/docs/robots.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-User-agent: *
-
-Allow: /
-
-Disallow: /old*
-
-Sitemap: https://docs.pyrogram.org/sitemap.xml
\ No newline at end of file
diff --git a/docs/scripts/releases.py b/docs/scripts/releases.py
deleted file mode 100644
index 4a32dd29..00000000
--- a/docs/scripts/releases.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# Pyrogram - Telegram MTProto API Client Library for Python
-# Copyright (C) 2017-2021 Dan
-#
-# This file is part of Pyrogram.
-#
-# Pyrogram is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Pyrogram is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with Pyrogram. If not, see .
-
-import shutil
-from datetime import datetime
-from pathlib import Path
-
-import pypandoc
-import requests
-
-URL = "https://api.github.com/repos/pyrogram/pyrogram/releases"
-DEST = Path("../source/releases")
-INTRO = """
-Release Notes
-=============
-
-Release notes for Pyrogram releases will describe what's new in each version, and will also make you aware of any
-backwards-incompatible changes made in that version.
-
-When upgrading to a new version of Pyrogram, you will need to check all the breaking changes in order to find
-incompatible code in your application, but also to take advantage of new features and improvements.
-
-**Contents**
-
-""".lstrip("\n")
-
-shutil.rmtree(DEST, ignore_errors=True)
-DEST.mkdir(parents=True)
-
-releases = requests.get(URL).json()
-
-with open(DEST / "index.rst", "w") as index:
- index.write(INTRO)
-
- tags = []
-
- for release in releases:
- tag = release["tag_name"]
- title = release["name"]
- name = title.split(" - ")[1]
-
- date = datetime.strptime(
- release["published_at"],
- "%Y-%m-%dT%H:%M:%SZ"
- ).strftime("%b %d, %Y")
-
- body = pypandoc.convert_text(
- release["body"].replace(r"\r\n", "\n"),
- "rst",
- format="markdown_github",
- extra_args=["--wrap=none"]
- )
-
- tarball_url = release["tarball_url"]
- zipball_url = release["zipball_url"]
-
- index.write("- :doc:`{} <{}>`\n".format(title, tag))
- tags.append(tag)
-
- with open(DEST / "{}.rst".format(tag), "w") as page:
- page.write("Pyrogram " + tag + "\n" + "=" * (len(tag) + 9) + "\n\n")
- page.write("\t\tReleased on " + str(date) + "\n\n")
- page.write("- :download:`Source Code (zip) <{}>`\n".format(zipball_url))
- page.write("- :download:`Source Code (tar.gz) <{}>`\n\n".format(tarball_url))
- page.write(name + "\n" + "-" * len(name) + "\n\n")
- page.write(body + "\n\n")
-
- index.write("\n.. toctree::\n :hidden:\n\n")
- index.write("\n".join(" {}".format(tag) for tag in tags))
diff --git a/docs/scripts/sitemap.py b/docs/scripts/sitemap.py
deleted file mode 100644
index 9c28bd1c..00000000
--- a/docs/scripts/sitemap.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Pyrogram - Telegram MTProto API Client Library for Python
-# Copyright (C) 2017-2021 Dan
-#
-# This file is part of Pyrogram.
-#
-# Pyrogram is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Pyrogram is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with Pyrogram. If not, see .
-
-import datetime
-import os
-
-canonical = "https://docs.pyrogram.org/"
-
-dirs = {
- ".": ("weekly", 1.0),
- "intro": ("weekly", 0.9),
- "start": ("weekly", 0.9),
- "api": ("weekly", 0.8),
- "topics": ("weekly", 0.8),
- "releases": ("weekly", 0.8),
- "telegram": ("weekly", 0.6)
-}
-
-
-def now():
- return datetime.datetime.today().strftime("%Y-%m-%d")
-
-
-with open("sitemap.xml", "w") as f:
- f.write('\n')
- f.write('\n')
-
- urls = []
-
-
- def search(path):
- try:
- for j in os.listdir(path):
- search(f"{path}/{j}")
- except NotADirectoryError:
- if not path.endswith(".rst"):
- return
-
- path = path.split("/")[2:]
-
- if path[0].endswith(".rst"):
- folder = "."
- else:
- folder = path[0]
-
- path = f"{canonical}{'/'.join(path)}"[:-len(".rst")]
-
- if path.endswith("index"):
- path = path[:-len("index")]
-
- urls.append((path, now(), *dirs[folder]))
-
-
- search("../source")
-
- urls.sort(key=lambda x: x[3], reverse=True)
-
- for i in urls:
- f.write(f" \n")
- f.write(f" {i[0]}\n")
- f.write(f" {i[1]}\n")
- f.write(f" {i[2]}\n")
- f.write(f" {i[3]}\n")
- f.write(f" \n")
-
- f.write("")
diff --git a/docs/source/_images/favicon.ico b/docs/source/_images/favicon.ico
deleted file mode 100644
index 4165f9edce821093f62506253dc379390f17cb64..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 16958
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ξ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