Merge develop -> asyncio-dev
This commit is contained in:
commit
aa078f103c
@ -26,7 +26,7 @@ NOTICE_PATH = "NOTICE"
|
|||||||
SECTION_RE = re.compile(r"---(\w+)---")
|
SECTION_RE = re.compile(r"---(\w+)---")
|
||||||
LAYER_RE = re.compile(r"//\sLAYER\s(\d+)")
|
LAYER_RE = re.compile(r"//\sLAYER\s(\d+)")
|
||||||
COMBINATOR_RE = re.compile(r"^([\w.]+)#([0-9a-f]+)\s(?:.*)=\s([\w<>.]+);(?: // Docs: (.+))?$", re.MULTILINE)
|
COMBINATOR_RE = re.compile(r"^([\w.]+)#([0-9a-f]+)\s(?:.*)=\s([\w<>.]+);(?: // Docs: (.+))?$", re.MULTILINE)
|
||||||
ARGS_RE = re.compile("[^{](\w+):([\w?!.<>#]+)")
|
ARGS_RE = re.compile(r"[^{](\w+):([\w?!.<>#]+)")
|
||||||
FLAGS_RE = re.compile(r"flags\.(\d+)\?")
|
FLAGS_RE = re.compile(r"flags\.(\d+)\?")
|
||||||
FLAGS_RE_2 = re.compile(r"flags\.(\d+)\?([\w<>.]+)")
|
FLAGS_RE_2 = re.compile(r"flags\.(\d+)\?([\w<>.]+)")
|
||||||
FLAGS_RE_3 = re.compile(r"flags:#")
|
FLAGS_RE_3 = re.compile(r"flags:#")
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
- Install requirements.
|
- Install requirements.
|
||||||
- Install `pandoc` and `latexmk`.
|
- Install `pandoc` and `latexmk`.
|
||||||
- HTML: `make html`
|
- HTML: `make html`
|
||||||
- PDF: `make latexpdf`
|
- PDF: `make latexpdf`
|
||||||
|
|
||||||
TODO: Explain better
|
TODO: Explain better
|
@ -106,7 +106,7 @@ Welcome to Pyrogram
|
|||||||
|
|
||||||
@app.on_message(Filters.private)
|
@app.on_message(Filters.private)
|
||||||
def hello(client, message):
|
def hello(client, message):
|
||||||
message.reply_text("Hello {}".format(message.from_user.first_name))
|
message.reply_text(f"Hello {message.from_user.first_name}")
|
||||||
|
|
||||||
|
|
||||||
app.run()
|
app.run()
|
||||||
|
@ -71,5 +71,15 @@ Projects Showcase
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
`Pyrubrum <https://github.com/hearot/pyrubrum>`_
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
| **An intuitive framework for creating Telegram bots**
|
||||||
|
| --- by `Hearot <https://t.me/hearot>`_
|
||||||
|
|
||||||
|
- Source Code: https://github.com/hearot/pyrubrum
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
.. _Feature Request: https://github.com/pyrogram/pyrogram/issues/new?labels=enhancement&template=feature_request.md
|
.. _Feature Request: https://github.com/pyrogram/pyrogram/issues/new?labels=enhancement&template=feature_request.md
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ import shutil
|
|||||||
import tempfile
|
import tempfile
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from hashlib import sha256, md5
|
from hashlib import sha256, md5
|
||||||
from importlib import import_module, reload
|
from importlib import import_module
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from signal import signal, SIGINT, SIGTERM, SIGABRT
|
from signal import signal, SIGINT, SIGTERM, SIGABRT
|
||||||
from typing import Union, List, BinaryIO
|
from typing import Union, List, BinaryIO
|
||||||
@ -1527,7 +1527,7 @@ class Client(Methods, BaseClient):
|
|||||||
if not include:
|
if not include:
|
||||||
for path in sorted(Path(root.replace(".", "/")).rglob("*.py")):
|
for path in sorted(Path(root.replace(".", "/")).rglob("*.py")):
|
||||||
module_path = '.'.join(path.parent.parts + (path.stem,))
|
module_path = '.'.join(path.parent.parts + (path.stem,))
|
||||||
module = reload(import_module(module_path))
|
module = import_module(module_path)
|
||||||
|
|
||||||
for name in vars(module).keys():
|
for name in vars(module).keys():
|
||||||
# noinspection PyBroadException
|
# noinspection PyBroadException
|
||||||
@ -1549,7 +1549,7 @@ class Client(Methods, BaseClient):
|
|||||||
warn_non_existent_functions = True
|
warn_non_existent_functions = True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
module = reload(import_module(module_path))
|
module = import_module(module_path)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
log.warning('[{}] [LOAD] Ignoring non-existent module "{}"'.format(
|
log.warning('[{}] [LOAD] Ignoring non-existent module "{}"'.format(
|
||||||
self.session_name, module_path))
|
self.session_name, module_path))
|
||||||
@ -1653,7 +1653,7 @@ class Client(Methods, BaseClient):
|
|||||||
try:
|
try:
|
||||||
return self.storage.get_peer_by_id(peer_id)
|
return self.storage.get_peer_by_id(peer_id)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
if type(peer_id) is str:
|
if isinstance(peer_id, str):
|
||||||
if peer_id in ("self", "me"):
|
if peer_id in ("self", "me"):
|
||||||
return types.InputPeerSelf()
|
return types.InputPeerSelf()
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ class Filters:
|
|||||||
|
|
||||||
from_scheduled = create(lambda _, m: bool(m.from_scheduled), "FromScheduledFilter")
|
from_scheduled = create(lambda _, m: bool(m.from_scheduled), "FromScheduledFilter")
|
||||||
"""Filter new automatically sent messages that were previously scheduled."""
|
"""Filter new automatically sent messages that were previously scheduled."""
|
||||||
|
|
||||||
# Messages from linked channels are forwarded automatically by Telegram and have no sender (from_user is None).
|
# Messages from linked channels are forwarded automatically by Telegram and have no sender (from_user is None).
|
||||||
linked_channel = create(lambda _, m: bool(m.forward_from_chat and not m.from_user), "LinkedChannelFilter")
|
linked_channel = create(lambda _, m: bool(m.forward_from_chat and not m.from_user), "LinkedChannelFilter")
|
||||||
"""Filter messages that are automatically forwarded from the linked channel to the group chat."""
|
"""Filter messages that are automatically forwarded from the linked channel to the group chat."""
|
||||||
@ -277,11 +277,11 @@ class Filters:
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
commands = commands if type(commands) is list else [commands]
|
commands = commands if isinstance(commands, list) else [commands]
|
||||||
commands = {c if case_sensitive else c.lower() for c in commands}
|
commands = {c if case_sensitive else c.lower() for c in commands}
|
||||||
|
|
||||||
prefixes = [] if prefixes is None else prefixes
|
prefixes = [] if prefixes is None else prefixes
|
||||||
prefixes = prefixes if type(prefixes) is list else [prefixes]
|
prefixes = prefixes if isinstance(prefixes, list) else [prefixes]
|
||||||
prefixes = set(prefixes) if prefixes else {""}
|
prefixes = set(prefixes) if prefixes else {""}
|
||||||
|
|
||||||
return create(
|
return create(
|
||||||
@ -345,11 +345,11 @@ class Filters:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, users: int or str or list = None):
|
def __init__(self, users: int or str or list = None):
|
||||||
users = [] if users is None else users if type(users) is list else [users]
|
users = [] if users is None else users if isinstance(users, list) else [users]
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
"me" if u in ["me", "self"]
|
"me" if u in ["me", "self"]
|
||||||
else u.lower().strip("@") if type(u) is str
|
else u.lower().strip("@") if isinstance(u, str)
|
||||||
else u for u in users
|
else u for u in users
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -376,11 +376,11 @@ class Filters:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, chats: int or str or list = None):
|
def __init__(self, chats: int or str or list = None):
|
||||||
chats = [] if chats is None else chats if type(chats) is list else [chats]
|
chats = [] if chats is None else chats if isinstance(chats, list) else [chats]
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
"me" if c in ["me", "self"]
|
"me" if c in ["me", "self"]
|
||||||
else c.lower().strip("@") if type(c) is str
|
else c.lower().strip("@") if isinstance(c, str)
|
||||||
else c for c in chats
|
else c for c in chats
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from pyrogram.api import functions, types
|
from pyrogram.api import functions
|
||||||
from pyrogram.client.ext import BaseClient
|
from pyrogram.client.ext import BaseClient
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ class SetChatPhoto(BaseClient):
|
|||||||
photo (``str``):
|
photo (``str``):
|
||||||
New chat photo. You can pass a :obj:`Photo` file_id or a file path to upload a new photo from your local
|
New chat photo. You can pass a :obj:`Photo` file_id or a file path to upload a new photo from your local
|
||||||
machine.
|
machine.
|
||||||
|
|
||||||
file_ref (``str``, *optional*):
|
file_ref (``str``, *optional*):
|
||||||
A valid file reference obtained by a recently fetched media message.
|
A valid file reference obtained by a recently fetched media message.
|
||||||
To be used in combination with a file id in case a file reference is needed.
|
To be used in combination with a file id in case a file reference is needed.
|
||||||
|
@ -29,7 +29,7 @@ class UpdateChatUsername(BaseClient):
|
|||||||
username: Union[str, None]
|
username: Union[str, None]
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Update a channel or a supergroup username.
|
"""Update a channel or a supergroup username.
|
||||||
|
|
||||||
To update your own username (for users only, not bots) you can use :meth:`~Client.update_username`.
|
To update your own username (for users only, not bots) you can use :meth:`~Client.update_username`.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
@ -23,7 +23,6 @@ from typing import Union, List
|
|||||||
import pyrogram
|
import pyrogram
|
||||||
from pyrogram.api import functions
|
from pyrogram.api import functions
|
||||||
from pyrogram.client.ext import utils
|
from pyrogram.client.ext import utils
|
||||||
from pyrogram.errors import FloodWait
|
|
||||||
from ...ext import BaseClient
|
from ...ext import BaseClient
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
@ -22,7 +22,6 @@ from typing import Union, Iterable, List
|
|||||||
|
|
||||||
import pyrogram
|
import pyrogram
|
||||||
from pyrogram.api import functions, types
|
from pyrogram.api import functions, types
|
||||||
from pyrogram.errors import FloodWait
|
|
||||||
from ...ext import BaseClient, utils
|
from ...ext import BaseClient, utils
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
@ -35,7 +35,7 @@ class GetCommonChats(BaseClient):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List of :obj:`Chat`: On success, a list of the common chats is returned.
|
List of :obj:`Chat`: On success, a list of the common chats is returned.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
ValueError: If the user_id doesn't belong to a user.
|
ValueError: If the user_id doesn't belong to a user.
|
||||||
|
|
||||||
@ -58,5 +58,5 @@ class GetCommonChats(BaseClient):
|
|||||||
)
|
)
|
||||||
|
|
||||||
return pyrogram.List([pyrogram.Chat._parse_chat(self, x) for x in r.chats])
|
return pyrogram.List([pyrogram.Chat._parse_chat(self, x) for x in r.chats])
|
||||||
|
|
||||||
raise ValueError('The user_id "{}" doesn\'t belong to a user'.format(user_id))
|
raise ValueError('The user_id "{}" doesn\'t belong to a user'.format(user_id))
|
||||||
|
@ -28,13 +28,13 @@ class UpdateProfile(BaseClient):
|
|||||||
bio: str = None
|
bio: str = None
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Update your profile details such as first name, last name and bio.
|
"""Update your profile details such as first name, last name and bio.
|
||||||
|
|
||||||
You can omit the parameters you don't want to change.
|
You can omit the parameters you don't want to change.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
first_name (``str``, *optional*):
|
first_name (``str``, *optional*):
|
||||||
The new first name.
|
The new first name.
|
||||||
|
|
||||||
last_name (``str``, *optional*):
|
last_name (``str``, *optional*):
|
||||||
The new last name.
|
The new last name.
|
||||||
Pass "" (empty string) to remove it.
|
Pass "" (empty string) to remove it.
|
||||||
@ -42,19 +42,19 @@ class UpdateProfile(BaseClient):
|
|||||||
bio (``str``, *optional*):
|
bio (``str``, *optional*):
|
||||||
The new bio, also known as "about". Max 70 characters.
|
The new bio, also known as "about". Max 70 characters.
|
||||||
Pass "" (empty string) to remove it.
|
Pass "" (empty string) to remove it.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
``bool``: True on success.
|
``bool``: True on success.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
# Update your first name only
|
# Update your first name only
|
||||||
app.update_profile(first_name="Pyrogram")
|
app.update_profile(first_name="Pyrogram")
|
||||||
|
|
||||||
# Update first name and bio
|
# Update first name and bio
|
||||||
app.update_profile(first_name="Pyrogram", bio="https://docs.pyrogram.org/")
|
app.update_profile(first_name="Pyrogram", bio="https://docs.pyrogram.org/")
|
||||||
|
|
||||||
# Remove the last name
|
# Remove the last name
|
||||||
app.update_profile(last_name="")
|
app.update_profile(last_name="")
|
||||||
"""
|
"""
|
||||||
|
@ -28,7 +28,7 @@ class UpdateUsername(BaseClient):
|
|||||||
username: Union[str, None]
|
username: Union[str, None]
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Update your own username.
|
"""Update your own username.
|
||||||
|
|
||||||
This method only works for users, not bots. Bot usernames must be changed via Bot Support or by recreating
|
This method only works for users, not bots. Bot usernames must be changed via Bot Support or by recreating
|
||||||
them from scratch using BotFather. To update a channel or supergroup username you can use
|
them from scratch using BotFather. To update a channel or supergroup username you can use
|
||||||
:meth:`~Client.update_chat_username`.
|
:meth:`~Client.update_chat_username`.
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
from struct import pack
|
from struct import pack
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
import pyrogram
|
import pyrogram
|
||||||
from pyrogram.api import types
|
from pyrogram.api import types
|
||||||
@ -41,7 +40,6 @@ from pyrogram.client.types.object import Object
|
|||||||
from pyrogram.client.types.update import Update
|
from pyrogram.client.types.update import Update
|
||||||
from pyrogram.client.types.user_and_chats import User
|
from pyrogram.client.types.user_and_chats import User
|
||||||
from pyrogram.client.types.messages_and_media import Location
|
from pyrogram.client.types.messages_and_media import Location
|
||||||
from pyrogram.client.ext import utils
|
|
||||||
|
|
||||||
|
|
||||||
class ChosenInlineResult(Object, Update):
|
class ChosenInlineResult(Object, Update):
|
||||||
|
@ -16,14 +16,9 @@
|
|||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from struct import pack
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
import pyrogram
|
import pyrogram
|
||||||
from pyrogram.api import types
|
from pyrogram.api import types
|
||||||
from .thumbnail import Thumbnail
|
|
||||||
from ..object import Object
|
from ..object import Object
|
||||||
from ...ext.utils import encode_file_id, encode_file_ref
|
|
||||||
|
|
||||||
|
|
||||||
class Dice(Object):
|
class Dice(Object):
|
||||||
|
@ -23,7 +23,7 @@ from pyrogram.api.core import Message, MsgContainer, TLObject
|
|||||||
from .msg_id import MsgId
|
from .msg_id import MsgId
|
||||||
from .seq_no import SeqNo
|
from .seq_no import SeqNo
|
||||||
|
|
||||||
not_content_related = [Ping, HttpWait, MsgsAck, MsgContainer]
|
not_content_related = (Ping, HttpWait, MsgsAck, MsgContainer)
|
||||||
|
|
||||||
|
|
||||||
class MsgFactory:
|
class MsgFactory:
|
||||||
@ -34,6 +34,6 @@ class MsgFactory:
|
|||||||
return Message(
|
return Message(
|
||||||
body,
|
body,
|
||||||
MsgId(),
|
MsgId(),
|
||||||
self.seq_no(type(body) not in not_content_related),
|
self.seq_no(not isinstance(body, not_content_related)),
|
||||||
len(body)
|
len(body)
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user