2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-09-01 14:55:12 +00:00

Merge branch 'develop' into asyncio

# Conflicts:
#	pyrogram/__init__.py
#	pyrogram/client/client.py
#	pyrogram/session/session.py
This commit is contained in:
Dan
2019-03-25 11:40:00 +01:00
112 changed files with 280 additions and 298 deletions

View File

@@ -16,44 +16,22 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import asyncio
import sys
if sys.version_info[:3] in [(3, 5, 0), (3, 5, 1), (3, 5, 2)]:
from .vendor import typing
# Monkey patch the standard "typing" module because Python versions from 3.5.0 to 3.5.2 have a broken one.
sys.modules["typing"] = typing
__version__ = "0.12.0.develop"
__license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)"
__copyright__ = "Copyright (C) 2017-2019 Dan Tès <https://github.com/delivrance>".replace(
"\xe8", "e" if sys.getfilesystemencoding() != "utf-8" else "\xe8"
)
try:
import uvloop
except ImportError:
pass
else:
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
uvloop.install()
__copyright__ = "Copyright (C) 2017-2019 Dan Tès <https://github.com/delivrance>".replace(
"\xe8",
"e" if sys.getfilesystemencoding() != "utf-8" else "\xe8"
)
__license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)"
__version__ = "0.12.0.asyncio"
from .api.errors import Error
from .client.types import (
Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMedia, InputMediaPhoto,
InputMediaVideo, InputMediaDocument, InputMediaAudio, InputMediaAnimation, InputPhoneContact,
Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, User, UserStatus,
UserProfilePhotos, Venue, Animation, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply,
InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove,
InlineQuery, InlineQueryResult, InlineQueryResultArticle, InputMessageContent, InputTextMessageContent,
InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove, Poll,
PollOption, ChatPreview, StopPropagation, ContinuePropagation, Game, CallbackGame, GameHighScore, GameHighScores,
ChatPermissions
)
from .client import (
Client, ChatAction, ParseMode, Emoji,
MessageHandler, DeletedMessagesHandler, CallbackQueryHandler,
RawUpdateHandler, DisconnectHandler, UserStatusHandler, Filters,
InlineQueryHandler
)
from .errors import RPCError
from .client import *
from .client.handlers import *
from .client.types import *

View File

@@ -39,18 +39,9 @@ class Object:
def __str__(self) -> str:
return dumps(self, indent=4, default=default, ensure_ascii=False)
def __bool__(self) -> bool:
return True
def __eq__(self, other) -> bool:
return self.__dict__ == other.__dict__
def __len__(self) -> int:
return len(self.write())
def __call__(self):
pass
def __getitem__(self, item):
return getattr(self, item)

View File

@@ -19,9 +19,7 @@
from .client import Client
from .ext import BaseClient, ChatAction, Emoji, ParseMode
from .filters import Filters
from .handlers import (
MessageHandler, DeletedMessagesHandler,
CallbackQueryHandler, RawUpdateHandler,
DisconnectHandler, UserStatusHandler,
InlineQueryHandler
)
__all__ = [
"Client", "BaseClient", "ChatAction", "Emoji", "ParseMode", "Filters",
]

View File

@@ -41,7 +41,7 @@ from typing import Union, List
from pyrogram.api import functions, types
from pyrogram.api.core import Object
from pyrogram.api.errors import (
from pyrogram.errors import (
PhoneMigrate, NetworkMigrate, PhoneNumberInvalid,
PhoneNumberUnoccupied, PhoneCodeInvalid, PhoneCodeHashEmpty,
PhoneCodeExpired, PhoneCodeEmpty, SessionPasswordNeeded,
@@ -49,14 +49,13 @@ from pyrogram.api.errors import (
VolumeLocNotFound, UserMigrate, FileIdInvalid, ChannelPrivate, PhoneNumberOccupied,
PasswordRecoveryNa, PasswordEmpty
)
from pyrogram.client.handlers import DisconnectHandler
from pyrogram.client.handlers.handler import Handler
from pyrogram.client.methods.password.utils import compute_check
from pyrogram.crypto import AES
from pyrogram.session import Auth, Session
from .dispatcher import Dispatcher
from .ext import BaseClient, Syncer, utils
from .ext.utils import ainput
from .handlers import DisconnectHandler
from .ext import utils, Syncer, BaseClient, Dispatcher
from .methods import Methods
log = logging.getLogger(__name__)
@@ -274,7 +273,7 @@ class Client(Methods, BaseClient):
Requires no parameters.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ConnectionError`` in case you try to start an already started Client.
"""
if self.is_started:
@@ -436,7 +435,7 @@ class Client(Methods, BaseClient):
Pass a coroutine to run it until is complete.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
run = asyncio.get_event_loop().run_until_complete
@@ -1044,7 +1043,7 @@ class Client(Methods, BaseClient):
Timeout in seconds.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if not self.is_started:
raise ConnectionError("Client has not been started")
@@ -1334,7 +1333,7 @@ class Client(Methods, BaseClient):
On success, the resolved peer id is returned in form of an InputPeer object.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``KeyError`` in case the peer doesn't exist in the internal database.
"""
try:
@@ -1437,7 +1436,7 @@ class Client(Methods, BaseClient):
On success, the uploaded file is returned in form of an InputFile object.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
async def worker(session):

View File

@@ -1,19 +0,0 @@
# Pyrogram - Telegram MTProto API Client Library for Python
# Copyright (C) 2017-2019 Dan Tès <https://github.com/delivrance>
#
# 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 <http://www.gnu.org/licenses/>.
from .dispatcher import Dispatcher

View File

@@ -18,6 +18,7 @@
from .base_client import BaseClient
from .chat_action import ChatAction
from .dispatcher import Dispatcher
from .emoji import Emoji
from .parse_mode import ParseMode
from .syncer import Syncer

View File

@@ -22,7 +22,6 @@ from collections import OrderedDict
import pyrogram
from pyrogram.api import types
from ..ext import utils
from ..handlers import (
CallbackQueryHandler, MessageHandler, DeletedMessagesHandler,
UserStatusHandler, RawUpdateHandler, InlineQueryHandler

View File

@@ -23,3 +23,8 @@ from .inline_query_handler import InlineQueryHandler
from .message_handler import MessageHandler
from .raw_update_handler import RawUpdateHandler
from .user_status_handler import UserStatusHandler
__all__ = [
"MessageHandler", "DeletedMessagesHandler", "CallbackQueryHandler", "RawUpdateHandler", "DisconnectHandler",
"UserStatusHandler", "InlineQueryHandler"
]

View File

@@ -57,7 +57,7 @@ class AnswerCallbackQuery(BaseClient):
True, on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return await self.send(
functions.messages.SetBotCallbackAnswer(

View File

@@ -52,7 +52,7 @@ class GetGameHighScores(BaseClient):
On success, a :obj:`GameHighScores <pyrogram.GameHighScores>` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
# TODO: inline_message_id

View File

@@ -19,7 +19,7 @@
from typing import Union
from pyrogram.api import functions, types
from pyrogram.api.errors import UnknownError
from pyrogram.errors import UnknownError
from pyrogram.client.ext import BaseClient
@@ -58,7 +58,7 @@ class GetInlineBotResults(BaseClient):
On Success, :obj:`BotResults <pyrogram.api.types.messages.BotResults>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``TimeoutError`` if the bot fails to answer within 10 seconds
"""
# TODO: Don't return the raw type

View File

@@ -49,7 +49,7 @@ class RequestCallbackAnswer(BaseClient):
or as an alert.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``TimeoutError`` if the bot fails to answer within 10 seconds.
"""
return await self.send(

View File

@@ -63,7 +63,7 @@ class SendGame(BaseClient):
On success, the sent :obj:`Message` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
r = await self.send(
functions.messages.SendMedia(

View File

@@ -61,7 +61,7 @@ class SendInlineBotResult(BaseClient):
On success, the sent Message is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return await self.send(
functions.messages.SendInlineBotResult(

View File

@@ -67,7 +67,7 @@ class SetGameScore(BaseClient):
otherwise returns True.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
:class:`BotScoreNotModified` if the new score is not greater than the user's current score in the chat and force is False.
"""
r = await self.send(

View File

@@ -43,7 +43,7 @@ class DeleteChatPhoto(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if a chat_id belongs to user.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -40,7 +40,7 @@ class ExportChatInviteLink(BaseClient):
On success, the exported invite link as string is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -42,7 +42,7 @@ class GetChat(BaseClient):
On success, a :obj:`Chat <pyrogram.Chat>` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` in case the chat invite link refers to a chat you haven't joined yet.
"""
match = self.INVITE_LINK_RE.match(str(chat_id))

View File

@@ -19,7 +19,8 @@
from typing import Union
import pyrogram
from pyrogram.api import functions, types, errors
from pyrogram.api import functions, types
from pyrogram.errors import UserNotParticipant
from ...ext import BaseClient
@@ -44,7 +45,7 @@ class GetChatMember(BaseClient):
On success, a :obj:`ChatMember <pyrogram.ChatMember>` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
chat_id = await self.resolve_peer(chat_id)
user_id = await self.resolve_peer(user_id)
@@ -60,7 +61,7 @@ class GetChatMember(BaseClient):
if member.user.is_self:
return member
else:
raise errors.UserNotParticipant
raise UserNotParticipant
elif isinstance(chat_id, types.InputPeerChannel):
r = await self.send(
functions.channels.GetParticipant(

View File

@@ -84,7 +84,7 @@ class GetChatMembers(BaseClient):
On success, a :obj:`ChatMembers` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if you used an invalid filter or a chat_id that belongs to a user.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -37,7 +37,7 @@ class GetChatMembersCount(BaseClient):
On success, an integer is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if a chat_id belongs to user.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -38,7 +38,7 @@ class GetChatPreview(BaseClient):
Either :obj:`Chat` or :obj:`ChatPreview`, depending on whether you already joined the chat or not.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` in case of an invalid invite_link.
"""
match = self.INVITE_LINK_RE.match(invite_link)

View File

@@ -21,7 +21,7 @@ import logging
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FloodWait
from pyrogram.errors import FloodWait
from ...ext import BaseClient
log = logging.getLogger(__name__)
@@ -56,7 +56,7 @@ class GetDialogs(BaseClient):
On success, a :obj:`Dialogs` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
while True:

View File

@@ -81,7 +81,7 @@ class IterChatMembers(BaseClient):
A generator yielding :obj:`ChatMember <pyrogram.ChatMember>` objects.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
current = 0
yielded = set()

View File

@@ -49,7 +49,7 @@ class IterDialogs(BaseClient):
A generator yielding :obj:`Dialog <pyrogram.Dialog>` objects.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
current = 0
total = limit or (1 << 31) - 1

View File

@@ -37,7 +37,7 @@ class JoinChat(BaseClient):
On success, a :obj:`Chat <pyrogram.Chat>` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
match = self.INVITE_LINK_RE.match(chat_id)

View File

@@ -57,7 +57,7 @@ class KickChatMember(BaseClient):
On success, either True or a service :obj:`Message <pyrogram.Message>` will be returned (when applicable).
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
chat_peer = await self.resolve_peer(chat_id)
user_peer = await self.resolve_peer(user_id)

View File

@@ -39,7 +39,7 @@ class LeaveChat(BaseClient):
Deletes the group chat dialog after leaving (for simple group chats, not supergroups).
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -48,7 +48,7 @@ class PinChatMessage(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
await self.send(
functions.messages.UpdatePinnedMessage(

View File

@@ -79,7 +79,7 @@ class PromoteChatMember(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
await self.send(
functions.channels.EditAdmin(

View File

@@ -73,7 +73,7 @@ class RestrictChat(BaseClient):
On success, a :obj:`Chat <pyrogram.Chat>` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
send_messages = True
send_media = True

View File

@@ -86,7 +86,7 @@ class RestrictChatMember(BaseClient):
On success, a :obj:`Chat <pyrogram.Chat>` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
send_messages = True
send_media = True

View File

@@ -42,7 +42,7 @@ class SetChatDescription(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if a chat_id doesn't belong to a supergroup or a channel.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -50,7 +50,7 @@ class SetChatPhoto(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if a chat_id belongs to user.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -47,7 +47,7 @@ class SetChatTitle(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if a chat_id belongs to user.
"""
peer = await self.resolve_peer(chat_id)

View File

@@ -44,7 +44,7 @@ class UnbanChatMember(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
await self.send(
functions.channels.EditBanned(

View File

@@ -39,7 +39,7 @@ class UnpinChatMessage(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
await self.send(
functions.messages.UpdatePinnedMessage(

View File

@@ -42,7 +42,7 @@ class UpdateChatUsername(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if a chat_id belongs to a user or chat.
"""

View File

@@ -38,7 +38,7 @@ class AddContacts(BaseClient):
On success, the added contacts are returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
imported_contacts = await self.send(
functions.contacts.ImportContacts(

View File

@@ -19,7 +19,7 @@
from typing import List
from pyrogram.api import functions, types
from pyrogram.api.errors import PeerIdInvalid
from pyrogram.errors import PeerIdInvalid
from ...ext import BaseClient
@@ -39,7 +39,7 @@ class DeleteContacts(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
contacts = []

View File

@@ -21,7 +21,7 @@ import logging
import pyrogram
from pyrogram.api import functions
from pyrogram.api.errors import FloodWait
from pyrogram.errors import FloodWait
from ...ext import BaseClient
log = logging.getLogger(__name__)
@@ -35,7 +35,7 @@ class GetContacts(BaseClient):
On success, a list of :obj:`User` objects is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
while True:
try:

View File

@@ -45,7 +45,7 @@ class ClosePoll(BaseClient):
On success, True is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
poll = self.get_messages(chat_id, message_id).poll

View File

@@ -31,14 +31,6 @@ class DeleteMessages(BaseClient):
) -> bool:
"""Use this method to delete messages, including service messages.
Deleting messages have the following limitations:
- A message can only be deleted if it was sent less than 48 hours ago.
- Users can delete outgoing messages in groups and supergroups.
- Users granted *can_post_messages* permissions can delete outgoing messages in channels.
- If the user is an administrator of a group, it can delete any message there.
- If the user has *can_delete_messages* permission in a supergroup or a channel, it can delete any message there.
Args:
chat_id (``int`` | ``str``):
Unique identifier (int) or username (str) of the target chat.
@@ -59,7 +51,7 @@ class DeleteMessages(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
peer = await self.resolve_peer(chat_id)
message_ids = list(message_ids) if not isinstance(message_ids, int) else [message_ids]

View File

@@ -77,7 +77,7 @@ class DownloadMedia(BaseClient):
In case the download is deliberately stopped with :meth:`stop_transmission`, None is returned as well.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if the message doesn't contain any downloadable media
"""
error_message = "This message doesn't contain any downloadable media"

View File

@@ -58,7 +58,7 @@ class EditMessageCaption(BaseClient):
On success, the edited :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid
from pyrogram.errors import FileIdInvalid
from pyrogram.client.ext import BaseClient, utils
from pyrogram.client.types import (
InputMediaPhoto, InputMediaVideo, InputMediaAudio,
@@ -66,7 +66,7 @@ class EditMessageMedia(BaseClient):
On success, the edited :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
style = self.html if media.parse_mode.lower() == "html" else self.markdown
caption = media.caption

View File

@@ -49,7 +49,7 @@ class EditMessageReplyMarkup(BaseClient):
:obj:`Message <pyrogram.Message>` is returned, otherwise True is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
r = await self.send(

View File

@@ -62,7 +62,7 @@ class EditMessageText(BaseClient):
On success, the edited :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -70,7 +70,7 @@ class ForwardMessages(BaseClient):
is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
is_iterable = not isinstance(message_ids, int)

View File

@@ -22,7 +22,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions
from pyrogram.api.errors import FloodWait
from pyrogram.errors import FloodWait
from ...ext import BaseClient
log = logging.getLogger(__name__)
@@ -70,7 +70,7 @@ class GetHistory(BaseClient):
On success, a :obj:`Messages <pyrogram.Messages>` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
while True:

View File

@@ -22,7 +22,7 @@ from typing import Union, Iterable
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FloodWait
from pyrogram.errors import FloodWait
from ...ext import BaseClient
log = logging.getLogger(__name__)
@@ -63,7 +63,7 @@ class GetMessages(BaseClient):
*reply_to_message_ids* was an integer, the single requested :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
ids, ids_type = (
(message_ids, types.InputMessageID) if message_ids

View File

@@ -67,7 +67,7 @@ class IterHistory(BaseClient):
A generator yielding :obj:`Message <pyrogram.Message>` objects.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
offset_id = offset_id or (1 if reverse else 0)
current = 0

View File

@@ -43,7 +43,7 @@ class RetractVote(BaseClient):
On success, True is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
self.send(
functions.messages.SendVote(

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -125,7 +125,7 @@ class SendAnimation(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -126,7 +126,7 @@ class SendAudio(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -22,7 +22,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid
from pyrogram.errors import FileIdInvalid
from pyrogram.client.ext import BaseClient, utils
@@ -81,7 +81,7 @@ class SendCachedMedia(BaseClient):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -51,7 +51,7 @@ class SendChatAction(BaseClient):
On success, True is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if the provided string is not a valid ChatAction.
"""

View File

@@ -74,7 +74,7 @@ class SendContact(BaseClient):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
r = await self.send(
functions.messages.SendMedia(

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -112,7 +112,7 @@ class SendDocument(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -67,7 +67,7 @@ class SendLocation(BaseClient):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
r = await self.send(
functions.messages.SendMedia(

View File

@@ -25,7 +25,7 @@ import asyncio
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FloodWait
from pyrogram.errors import FileIdInvalid, FloodWait
from pyrogram.client.ext import BaseClient, utils
log = logging.getLogger(__name__)
@@ -64,7 +64,7 @@ class SendMediaGroup(BaseClient):
single messages sent.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
multi_media = []

View File

@@ -73,7 +73,7 @@ class SendMessage(BaseClient):
On success, the sent :obj:`Message` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
style = self.html if parse_mode.lower() == "html" else self.markdown
message, entities = style.parse(text).values()

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -112,7 +112,7 @@ class SendPhoto(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -67,7 +67,7 @@ class SendPoll(BaseClient):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
r = self.send(
functions.messages.SendMedia(

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -96,7 +96,7 @@ class SendSticker(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None

View File

@@ -84,7 +84,7 @@ class SendVenue(BaseClient):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
r = await self.send(
functions.messages.SendMedia(

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -129,7 +129,7 @@ class SendVideo(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -111,7 +111,7 @@ class SendVideoNote(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None

View File

@@ -23,7 +23,7 @@ from typing import Union
import pyrogram
from pyrogram.api import functions, types
from pyrogram.api.errors import FileIdInvalid, FilePartMissing
from pyrogram.errors import FileIdInvalid, FilePartMissing
from pyrogram.client.ext import BaseClient, utils
@@ -110,7 +110,7 @@ class SendVoice(BaseClient):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
file = None
style = self.html if parse_mode.lower() == "html" else self.markdown

View File

@@ -47,7 +47,7 @@ class VotePoll(BaseClient):
On success, True is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
poll = self.get_messages(chat_id, message_id).poll

View File

@@ -46,7 +46,7 @@ class ChangeCloudPassword(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` in case there is no cloud password to change.
"""
r = await self.send(functions.account.GetPassword())

View File

@@ -48,7 +48,7 @@ class EnableCloudPassword(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` in case there is already a cloud password enabled.
"""
r = await self.send(functions.account.GetPassword())

View File

@@ -36,7 +36,7 @@ class RemoveCloudPassword(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` in case there is no cloud password to remove.
"""
r = await self.send(functions.account.GetPassword())

View File

@@ -40,7 +40,7 @@ class DeleteUserProfilePhotos(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
id = id if isinstance(id, list) else [id]
input_photos = []

View File

@@ -29,7 +29,7 @@ class GetMe(BaseClient):
Basic information about the user or bot in form of a :obj:`User` object
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return pyrogram.User._parse(
self,

View File

@@ -50,7 +50,7 @@ class GetUserProfilePhotos(BaseClient):
On success, a :obj:`UserProfilePhotos` object is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return pyrogram.UserProfilePhotos._parse(
self,

View File

@@ -44,7 +44,7 @@ class GetUsers(BaseClient):
*user_ids* was an integer or string, the single requested :obj:`User` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
is_iterable = not isinstance(user_ids, (int, str))
user_ids = list(user_ids) if is_iterable else [user_ids]

View File

@@ -39,7 +39,7 @@ class SetUserProfilePhoto(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return bool(

View File

@@ -41,7 +41,7 @@ class UpdateUsername(BaseClient):
True on success.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return bool(

View File

@@ -16,28 +16,10 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from .bots import (
ForceReply, InlineKeyboardButton, InlineKeyboardMarkup,
KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove, CallbackGame,
GameHighScore, GameHighScores, CallbackQuery
)
from .inline_mode import (
InlineQuery, InlineQueryResult, InlineQueryResultArticle
)
from .input_media import (
InputMedia, InputMediaAudio, InputPhoneContact, InputMediaVideo, InputMediaPhoto,
InputMediaDocument, InputMediaAnimation
)
from .input_message_content import (
InputMessageContent, InputTextMessageContent
)
from .messages_and_media import (
Audio, Contact, Document, Animation, Location, Photo, PhotoSize,
Sticker, Venue, Video, VideoNote, Voice, UserProfilePhotos,
Message, Messages, MessageEntity, Poll, PollOption, Game
)
from .update import StopPropagation, ContinuePropagation
from .user_and_chats import (
Chat, ChatMember, ChatMembers, ChatPhoto,
Dialog, Dialogs, User, UserStatus, ChatPreview, ChatPermissions
)
from .bots import *
from .inline_mode import *
from .input_media import *
from .input_message_content import *
from .messages_and_media import *
from .update import *
from .user_and_chats import *

View File

@@ -26,3 +26,8 @@ from .inline_keyboard_markup import InlineKeyboardMarkup
from .keyboard_button import KeyboardButton
from .reply_keyboard_markup import ReplyKeyboardMarkup
from .reply_keyboard_remove import ReplyKeyboardRemove
__all__ = [
"CallbackGame", "CallbackQuery", "ForceReply", "GameHighScore", "GameHighScores", "InlineKeyboardButton",
"InlineKeyboardMarkup", "KeyboardButton", "ReplyKeyboardMarkup", "ReplyKeyboardRemove"
]

View File

@@ -19,3 +19,7 @@
from .inline_query import InlineQuery
from .inline_query_result import InlineQueryResult
from .inline_query_result_article import InlineQueryResultArticle
__all__ = [
"InlineQuery", "InlineQueryResult", "InlineQueryResultArticle"
]

View File

@@ -20,7 +20,7 @@ import binascii
import struct
from pyrogram.api import types
from pyrogram.api.errors import FileIdInvalid
from pyrogram.errors import FileIdInvalid
from pyrogram.client.ext import utils, BaseClient
from pyrogram.client.style import HTML, Markdown
from pyrogram.client.types.pyrogram_type import PyrogramType

View File

@@ -23,3 +23,8 @@ from .input_media_document import InputMediaDocument
from .input_media_photo import InputMediaPhoto
from .input_media_video import InputMediaVideo
from .input_phone_contact import InputPhoneContact
__all__ = [
"InputMedia", "InputMediaAnimation", "InputMediaAudio", "InputMediaDocument", "InputMediaPhoto", "InputMediaVideo",
"InputPhoneContact"
]

View File

@@ -18,3 +18,7 @@
from .input_message_content import InputMessageContent
from .input_text_message_content import InputTextMessageContent
__all__ = [
"InputMessageContent", "InputTextMessageContent"
]

View File

@@ -35,3 +35,8 @@ from .venue import Venue
from .video import Video
from .video_note import VideoNote
from .voice import Voice
__all__ = [
"Animation", "Audio", "Contact", "Document", "Game", "Location", "Message", "MessageEntity", "Messages", "Photo",
"PhotoSize", "Poll", "PollOption", "Sticker", "UserProfilePhotos", "Venue", "Video", "VideoNote", "Voice"
]

View File

@@ -21,7 +21,7 @@ from typing import List, Match, Union
import pyrogram
from pyrogram.api import types
from pyrogram.api.errors import MessageIdsEmpty
from pyrogram.errors import MessageIdsEmpty
from pyrogram.client.ext import ChatAction, ParseMode
from pyrogram.client.types.input_media import InputMedia
from .contact import Contact
@@ -79,6 +79,9 @@ class Message(PyrogramType, Update):
forward_from (:obj:`User <pyrogram.User>`, *optional*):
For forwarded messages, sender of the original message.
forward_from_name (``str``, *optional*):
For messages forwarded from users who have hidden their accounts, name of the user.
forward_from_chat (:obj:`Chat <pyrogram.Chat>`, *optional*):
For messages forwarded from channels, information about the original channel.
@@ -264,12 +267,12 @@ class Message(PyrogramType, Update):
# TODO: Add game missing field. Also invoice, successful_payment, connected_website
__slots__ = [
"message_id", "date", "chat", "from_user", "forward_from", "forward_from_chat", "forward_from_message_id",
"forward_signature", "forward_date", "reply_to_message", "mentioned", "empty", "service", "media", "edit_date",
"media_group_id", "author_signature", "text", "entities", "caption_entities", "audio", "document", "photo",
"sticker", "animation", "game", "video", "voice", "video_note", "caption", "contact", "location", "venue",
"web_page", "poll", "new_chat_members", "left_chat_member", "new_chat_title", "new_chat_photo",
"delete_chat_photo", "group_chat_created", "supergroup_chat_created", "channel_chat_created",
"message_id", "date", "chat", "from_user", "forward_from", "forward_from_name", "forward_from_chat",
"forward_from_message_id", "forward_signature", "forward_date", "reply_to_message", "mentioned", "empty",
"service", "media", "edit_date", "media_group_id", "author_signature", "text", "entities", "caption_entities",
"audio", "document", "photo", "sticker", "animation", "game", "video", "voice", "video_note", "caption",
"contact", "location", "venue", "web_page", "poll", "new_chat_members", "left_chat_member", "new_chat_title",
"new_chat_photo", "delete_chat_photo", "group_chat_created", "supergroup_chat_created", "channel_chat_created",
"migrate_to_chat_id", "migrate_from_chat_id", "pinned_message", "game_high_score", "views", "via_bot",
"outgoing", "matches", "command", "reply_markup"
]
@@ -283,6 +286,7 @@ class Message(PyrogramType, Update):
chat: Chat = None,
from_user: User = None,
forward_from: User = None,
forward_from_name: str = None,
forward_from_chat: Chat = None,
forward_from_message_id: int = None,
forward_signature: str = None,
@@ -344,6 +348,7 @@ class Message(PyrogramType, Update):
self.chat = chat
self.from_user = from_user
self.forward_from = forward_from
self.forward_from_name = forward_from_name
self.forward_from_chat = forward_from_chat
self.forward_from_message_id = forward_from_message_id
self.forward_signature = forward_signature
@@ -482,18 +487,21 @@ class Message(PyrogramType, Update):
entities = list(filter(lambda x: x is not None, entities))
forward_from = None
forward_from_name = None
forward_from_chat = None
forward_from_message_id = None
forward_signature = None
forward_date = None
forward_header = message.fwd_from
forward_header = message.fwd_from # type: types.MessageFwdHeader
if forward_header:
forward_date = forward_header.date
if forward_header.from_id:
forward_from = User._parse(client, users[forward_header.from_id])
elif forward_header.from_name:
forward_from_name = forward_header.from_name
else:
forward_from_chat = Chat._parse_channel_chat(client, chats[forward_header.channel_id])
forward_from_message_id = forward_header.channel_post
@@ -599,6 +607,7 @@ class Message(PyrogramType, Update):
caption_entities=entities or None if media is not None else None,
author_signature=message.post_author,
forward_from=forward_from,
forward_from_name=forward_from_name,
forward_from_chat=forward_from_chat,
forward_from_message_id=forward_from_message_id,
forward_signature=forward_signature,
@@ -699,7 +708,7 @@ class Message(PyrogramType, Update):
On success, the sent Message is returned.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
if quote is None:
quote = self.chat.type != "private"
@@ -828,7 +837,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
if quote is None:
quote = self.chat.type != "private"
@@ -963,7 +972,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1051,7 +1060,7 @@ class Message(PyrogramType, Update):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1105,7 +1114,7 @@ class Message(PyrogramType, Update):
On success, True is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
``ValueError`` if the provided string is not a valid ChatAction.
"""
return await self._client.send_chat_action(
@@ -1180,7 +1189,7 @@ class Message(PyrogramType, Update):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1298,7 +1307,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1372,7 +1381,7 @@ class Message(PyrogramType, Update):
On success, the sent :obj:`Message` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1440,7 +1449,7 @@ class Message(PyrogramType, Update):
On success, the sent Message is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1515,7 +1524,7 @@ class Message(PyrogramType, Update):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1578,7 +1587,7 @@ class Message(PyrogramType, Update):
single messages sent.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1691,7 +1700,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1770,7 +1779,7 @@ class Message(PyrogramType, Update):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1869,7 +1878,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -1964,7 +1973,7 @@ class Message(PyrogramType, Update):
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -2100,7 +2109,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -2222,7 +2231,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -2339,7 +2348,7 @@ class Message(PyrogramType, Update):
In case the upload is deliberately stopped with :meth:`stop_transmission`, None is returned instead.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
if quote is None:
quote = self.chat.type != "private"
@@ -2408,7 +2417,7 @@ class Message(PyrogramType, Update):
On success, the edited :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return await self._client.edit_message_text(
chat_id=self.chat.id,
@@ -2463,7 +2472,7 @@ class Message(PyrogramType, Update):
On success, the edited :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return await self._client.edit_message_caption(
chat_id=self.chat.id,
@@ -2502,7 +2511,7 @@ class Message(PyrogramType, Update):
On success, the edited :obj:`Message <pyrogram.Message>` is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return await self._client.edit_message_media(
chat_id=self.chat.id,
@@ -2538,7 +2547,7 @@ class Message(PyrogramType, Update):
:obj:`Message <pyrogram.Message>` is returned, otherwise True is returned.
Raises:
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
:class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
"""
return await self._client.edit_message_reply_markup(
chat_id=self.chat.id,
@@ -2593,7 +2602,7 @@ class Message(PyrogramType, Update):
On success, the forwarded Message is returned.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
if as_copy:
if self.service:
@@ -2723,7 +2732,7 @@ class Message(PyrogramType, Update):
True on success.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
await self._client.delete_messages(
chat_id=self.chat.id,
@@ -2788,7 +2797,7 @@ class Message(PyrogramType, Update):
button.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
``ValueError``: If the provided index or position is out of range or the button label was not found
``TimeoutError``: If, after clicking an inline button, the bot fails to answer within 10 seconds
"""
@@ -2889,7 +2898,7 @@ class Message(PyrogramType, Update):
On success, the absolute path of the downloaded file as string is returned, None otherwise.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
``ValueError``: If the message doesn't contain any downloadable media
"""
return await self._client.download_media(
@@ -2926,7 +2935,7 @@ class Message(PyrogramType, Update):
True on success.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
return await self._client.pin_chat_message(
chat_id=self.chat.id,

View File

@@ -153,7 +153,7 @@ class Messages(PyrogramType, Update):
On success, a :class:`Messages <pyrogram.Messages>` containing forwarded messages is returned.
Raises:
:class:`Error <pyrogram.Error>`
:class:`RPCError <pyrogram.RPCError>`
"""
forwarded_messages = []

View File

@@ -22,7 +22,7 @@ from async_lru import alru_cache
import pyrogram
from pyrogram.api import types, functions
from pyrogram.api.errors import StickersetInvalid
from pyrogram.errors import StickersetInvalid
from .photo_size import PhotoSize
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode

View File

@@ -26,3 +26,8 @@ from .dialog import Dialog
from .dialogs import Dialogs
from .user import User
from .user_status import UserStatus
__all__ = [
"Chat", "ChatMember", "ChatMembers", "ChatPermissions", "ChatPhoto", "ChatPreview", "Dialog", "Dialogs", "User",
"UserStatus"
]

View File

@@ -17,4 +17,4 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from .exceptions import *
from .error import UnknownError
from .rpc_error import UnknownError

View File

@@ -19,11 +19,11 @@
import re
from importlib import import_module
from pyrogram.api.types import RpcError
from pyrogram.api.types import RpcError as RawRPCError
from .exceptions.all import exceptions
class Error(Exception):
class RPCError(Exception):
"""This is the base exception class for all Telegram API related errors.
For a finer grained control, see the specific errors below.
"""
@@ -32,7 +32,7 @@ class Error(Exception):
NAME = None
MESSAGE = None
def __init__(self, x: int or RpcError = None, query_type: type = None):
def __init__(self, x: int or RawRPCError = None, query_type: type = None):
super().__init__("[{} {}]: {}".format(
self.CODE,
self.ID or self.NAME,
@@ -50,7 +50,7 @@ class Error(Exception):
f.write("{}\t{}\t{}\n".format(x.error_code, x.error_message, query_type))
@staticmethod
def raise_it(rpc_error: RpcError, query_type: type):
def raise_it(rpc_error: RawRPCError, query_type: type):
code = rpc_error.error_code
if code not in exceptions:
@@ -66,12 +66,12 @@ class Error(Exception):
x = x.group(1) if x is not None else x
raise getattr(
import_module("pyrogram.api.errors"),
import_module("pyrogram.errors"),
exceptions[code][id]
)(x=x)
class UnknownError(Error):
class UnknownError(RPCError):
"""This object represents an Unknown Error, that is, an error which
Pyrogram does not know anything about, yet.
"""

View File

@@ -27,7 +27,7 @@ from pyrogram import __copyright__, __license__, __version__
from pyrogram.api import functions, types
from pyrogram.api.all import layer
from pyrogram.api.core import Object, MsgContainer, Int, Long, FutureSalt, FutureSalts
from pyrogram.api.errors import Error, InternalServerError, AuthKeyDuplicated
from pyrogram.errors import RPCError, InternalServerError, AuthKeyDuplicated
from pyrogram.connection import Connection
from pyrogram.crypto import MTProto
from .internals import MsgId, MsgFactory
@@ -157,7 +157,7 @@ class Session:
except AuthKeyDuplicated as e:
await self.stop()
raise e
except (OSError, TimeoutError, Error):
except (OSError, TimeoutError, RPCError):
await self.stop()
except Exception as e:
await self.stop()
@@ -293,7 +293,7 @@ class Session:
ping_id=0, disconnect_delay=self.WAIT_TIMEOUT + 10
), False
)
except (OSError, TimeoutError, Error):
except (OSError, TimeoutError, RPCError):
pass
log.info("PingTask stopped")
@@ -322,7 +322,7 @@ class Session:
try:
self.current_salt = (await self._send(functions.GetFutureSalts(num=1))).salts[0]
except (OSError, TimeoutError, Error):
except (OSError, TimeoutError, RPCError):
self.connection.close()
break
@@ -381,7 +381,7 @@ class Session:
if result is None:
raise TimeoutError
elif isinstance(result, types.RpcError):
Error.raise_it(result, type(data))
RPCError.raise_it(result, type(data))
elif isinstance(result, types.BadMsgNotification):
raise Exception(self.BAD_MSG_DESCRIPTION.get(
result.error_code,