Skip to content

Commit e6667be

Browse files
committed
Merge branch 'develop' into asyncio
# Conflicts: # pyrogram/client/client.py # pyrogram/client/dispatcher/dispatcher.py # pyrogram/client/ext/utils.py # pyrogram/client/methods/bots/get_inline_bot_results.py # pyrogram/client/methods/bots/request_callback_answer.py # pyrogram/client/methods/bots/send_inline_bot_result.py # pyrogram/client/methods/chats/delete_chat_photo.py # pyrogram/client/methods/chats/export_chat_invite_link.py # pyrogram/client/methods/chats/get_chat.py # pyrogram/client/methods/chats/get_chat_member.py # pyrogram/client/methods/chats/get_chat_members.py # pyrogram/client/methods/chats/get_chat_members_count.py # pyrogram/client/methods/chats/get_dialogs.py # pyrogram/client/methods/chats/join_chat.py # pyrogram/client/methods/chats/kick_chat_member.py # pyrogram/client/methods/chats/leave_chat.py # pyrogram/client/methods/chats/pin_chat_message.py # pyrogram/client/methods/chats/promote_chat_member.py # pyrogram/client/methods/chats/restrict_chat_member.py # pyrogram/client/methods/chats/set_chat_description.py # pyrogram/client/methods/chats/set_chat_photo.py # pyrogram/client/methods/chats/set_chat_title.py # pyrogram/client/methods/chats/unban_chat_member.py # pyrogram/client/methods/chats/unpin_chat_message.py # pyrogram/client/methods/contacts/add_contacts.py # pyrogram/client/methods/contacts/delete_contacts.py # pyrogram/client/methods/messages/delete_messages.py # pyrogram/client/methods/messages/edit_message_caption.py # pyrogram/client/methods/messages/edit_message_media.py # pyrogram/client/methods/messages/edit_message_reply_markup.py # pyrogram/client/methods/messages/edit_message_text.py # pyrogram/client/methods/messages/forward_messages.py # pyrogram/client/methods/messages/get_history.py # pyrogram/client/methods/messages/get_messages.py # pyrogram/client/methods/messages/send_animation.py # pyrogram/client/methods/messages/send_audio.py # pyrogram/client/methods/messages/send_chat_action.py # pyrogram/client/methods/messages/send_contact.py # pyrogram/client/methods/messages/send_document.py # pyrogram/client/methods/messages/send_location.py # pyrogram/client/methods/messages/send_media_group.py # pyrogram/client/methods/messages/send_message.py # pyrogram/client/methods/messages/send_photo.py # pyrogram/client/methods/messages/send_sticker.py # pyrogram/client/methods/messages/send_venue.py # pyrogram/client/methods/messages/send_video.py # pyrogram/client/methods/messages/send_video_note.py # pyrogram/client/methods/messages/send_voice.py # pyrogram/client/methods/password/change_cloud_password.py # pyrogram/client/methods/password/enable_cloud_password.py # pyrogram/client/methods/password/remove_cloud_password.py # pyrogram/client/methods/users/delete_user_profile_photos.py # pyrogram/client/methods/users/get_me.py # pyrogram/client/methods/users/get_user_profile_photos.py # pyrogram/client/methods/users/get_users.py # pyrogram/client/methods/utilities/download_media.py # pyrogram/client/types/messages_and_media/message.py
2 parents 124f49c + 4bf6831 commit e6667be

File tree

102 files changed

+2149
-1968
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+2149
-1968
lines changed

compiler/api/compiler.py

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -475,39 +475,6 @@ def start():
475475
f.write("\n 0x3072cfa1: \"pyrogram.api.core.GzipPacked\",")
476476
f.write("\n 0x5bb8e511: \"pyrogram.api.core.Message\",")
477477

478-
f.write("\n 0xb0700000: \"pyrogram.client.types.Update\",")
479-
f.write("\n 0xb0700001: \"pyrogram.client.types.User\",")
480-
f.write("\n 0xb0700002: \"pyrogram.client.types.Chat\",")
481-
f.write("\n 0xb0700003: \"pyrogram.client.types.Message\",")
482-
f.write("\n 0xb0700004: \"pyrogram.client.types.MessageEntity\",")
483-
f.write("\n 0xb0700005: \"pyrogram.client.types.PhotoSize\",")
484-
f.write("\n 0xb0700006: \"pyrogram.client.types.Audio\",")
485-
f.write("\n 0xb0700007: \"pyrogram.client.types.Document\",")
486-
f.write("\n 0xb0700008: \"pyrogram.client.types.Video\",")
487-
f.write("\n 0xb0700009: \"pyrogram.client.types.Voice\",")
488-
f.write("\n 0xb0700010: \"pyrogram.client.types.VideoNote\",")
489-
f.write("\n 0xb0700011: \"pyrogram.client.types.Contact\",")
490-
f.write("\n 0xb0700012: \"pyrogram.client.types.Location\",")
491-
f.write("\n 0xb0700013: \"pyrogram.client.types.Venue\",")
492-
f.write("\n 0xb0700014: \"pyrogram.client.types.UserProfilePhotos\",")
493-
f.write("\n 0xb0700015: \"pyrogram.client.types.ChatPhoto\",")
494-
f.write("\n 0xb0700016: \"pyrogram.client.types.ChatMember\",")
495-
f.write("\n 0xb0700017: \"pyrogram.client.types.Sticker\",")
496-
f.write("\n 0xb0700018: \"pyrogram.client.types.bots.ForceReply\",")
497-
f.write("\n 0xb0700019: \"pyrogram.client.types.bots.InlineKeyboardButton\",")
498-
f.write("\n 0xb0700020: \"pyrogram.client.types.bots.InlineKeyboardMarkup\",")
499-
f.write("\n 0xb0700021: \"pyrogram.client.types.bots.KeyboardButton\",")
500-
f.write("\n 0xb0700022: \"pyrogram.client.types.bots.ReplyKeyboardMarkup\",")
501-
f.write("\n 0xb0700023: \"pyrogram.client.types.bots.ReplyKeyboardRemove\",")
502-
f.write("\n 0xb0700024: \"pyrogram.client.types.CallbackQuery\",")
503-
f.write("\n 0xb0700025: \"pyrogram.client.types.Animation\",")
504-
f.write("\n 0xb0700026: \"pyrogram.client.types.Messages\",")
505-
f.write("\n 0xb0700027: \"pyrogram.client.types.Photo\",")
506-
f.write("\n 0xb0700028: \"pyrogram.client.types.Dialog\",")
507-
f.write("\n 0xb0700029: \"pyrogram.client.types.Dialogs\",")
508-
f.write("\n 0xb0700030: \"pyrogram.client.types.ChatMembers\",")
509-
f.write("\n 0xb0700031: \"pyrogram.client.types.UserStatus\"")
510-
511478
f.write("\n}\n")
512479

513480
for k, v in namespaces.items():

pyrogram/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from .client.types import (
3838
Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMediaPhoto,
3939
InputMediaVideo, InputMediaDocument, InputMediaAudio, InputMediaAnimation, InputPhoneContact,
40-
Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, UserStatus,
40+
Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, User, UserStatus,
4141
UserProfilePhotos, Venue, Animation, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply,
4242
InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove
4343
)

pyrogram/client/client.py

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from importlib import import_module
3737
from pathlib import Path
3838
from signal import signal, SIGINT, SIGTERM, SIGABRT
39+
from typing import Union, List
3940

4041
from pyrogram.api import functions, types
4142
from pyrogram.api.core import Object
@@ -44,8 +45,7 @@
4445
PhoneNumberUnoccupied, PhoneCodeInvalid, PhoneCodeHashEmpty,
4546
PhoneCodeExpired, PhoneCodeEmpty, SessionPasswordNeeded,
4647
PasswordHashInvalid, FloodWait, PeerIdInvalid, FirstnameInvalid, PhoneNumberBanned,
47-
VolumeLocNotFound, UserMigrate, FileIdInvalid, ChannelPrivate)
48-
from pyrogram.client.handlers import DisconnectHandler
48+
VolumeLocNotFound, UserMigrate, FileIdInvalid, ChannelPrivate, PhoneNumberOccupied)
4949
from pyrogram.client.handlers.handler import Handler
5050
from pyrogram.crypto import AES
5151
from pyrogram.session import Auth, Session
@@ -153,7 +153,7 @@ class Client(Methods, BaseClient):
153153

154154
def __init__(self,
155155
session_name: str,
156-
api_id: int or str = None,
156+
api_id: Union[int, str] = None,
157157
api_hash: str = None,
158158
app_version: str = None,
159159
device_model: str = None,
@@ -163,7 +163,7 @@ def __init__(self,
163163
proxy: dict = None,
164164
test_mode: bool = False,
165165
phone_number: str = None,
166-
phone_code: str or callable = None,
166+
phone_code: Union[str, callable] = None,
167167
password: str = None,
168168
force_sms: bool = False,
169169
first_name: str = None,
@@ -372,7 +372,7 @@ def run(self, coroutine=None):
372372

373373
return coroutine
374374

375-
def add_handler(self, handler, group: int = 0):
375+
def add_handler(self, handler: Handler, group: int = 0):
376376
"""Use this method to register an update handler.
377377
378378
You can register multiple handlers, but at most one handler within a group
@@ -396,7 +396,7 @@ def add_handler(self, handler, group: int = 0):
396396

397397
return handler, group
398398

399-
def remove_handler(self, handler, group: int = 0):
399+
def remove_handler(self, handler: Handler, group: int = 0):
400400
"""Removes a previously-added update handler.
401401
402402
Make sure to provide the right group that the handler was added in. You can use
@@ -534,37 +534,36 @@ async def authorize_user(self):
534534

535535
try:
536536
if phone_registered:
537-
r = await self.send(
538-
functions.auth.SignIn(
539-
self.phone_number,
540-
phone_code_hash,
541-
self.phone_code
542-
)
543-
)
544-
else:
545537
try:
546-
await self.send(
538+
r = await self.send(
547539
functions.auth.SignIn(
548540
self.phone_number,
549541
phone_code_hash,
550542
self.phone_code
551543
)
552544
)
553545
except PhoneNumberUnoccupied:
554-
pass
555-
556-
self.first_name = self.first_name if self.first_name is not None else await ainput("First name: ")
557-
self.last_name = self.last_name if self.last_name is not None else await ainput("Last name: ")
546+
log.warning("Phone number unregistered")
547+
phone_registered = False
548+
continue
549+
else:
550+
self.first_name = self.first_name if self.first_name is not None else input("First name: ")
551+
self.last_name = self.last_name if self.last_name is not None else input("Last name: ")
558552

559-
r = await self.send(
560-
functions.auth.SignUp(
561-
self.phone_number,
562-
phone_code_hash,
563-
self.phone_code,
564-
self.first_name,
565-
self.last_name
553+
try:
554+
r = await self.send(
555+
functions.auth.SignUp(
556+
self.phone_number,
557+
phone_code_hash,
558+
self.phone_code,
559+
self.first_name,
560+
self.last_name
561+
)
566562
)
567-
)
563+
except PhoneNumberOccupied:
564+
log.warning("Phone number already registered")
565+
phone_registered = True
566+
continue
568567
except (PhoneCodeInvalid, PhoneCodeEmpty, PhoneCodeExpired, PhoneCodeHashEmpty) as e:
569568
if phone_code_invalid_raises:
570569
raise
@@ -630,7 +629,9 @@ async def authorize_user(self):
630629

631630
print("Logged in successfully as {}".format(r.user.first_name))
632631

633-
def fetch_peers(self, entities: list):
632+
def fetch_peers(self, entities: List[Union[types.User,
633+
types.Chat, types.ChatForbidden,
634+
types.Channel, types.ChannelForbidden]]):
634635
for entity in entities:
635636
if isinstance(entity, types.User):
636637
user_id = entity.id
@@ -886,7 +887,10 @@ async def updates_worker(self):
886887

887888
log.info("UpdatesWorkerTask stopped")
888889

889-
async def send(self, data: Object, retries: int = Session.MAX_RETRIES, timeout: float = Session.WAIT_TIMEOUT):
890+
async def send(self,
891+
data: Object,
892+
retries: int = Session.MAX_RETRIES,
893+
timeout: float = Session.WAIT_TIMEOUT):
890894
"""Use this method to send Raw Function queries.
891895
892896
This method makes possible to manually call every single Telegram API method in a low-level manner.
@@ -1045,7 +1049,8 @@ def save_session(self):
10451049
indent=4
10461050
)
10471051

1048-
async def get_initial_dialogs_chunk(self, offset_date: int = 0):
1052+
async def get_initial_dialogs_chunk(self,
1053+
offset_date: int = 0):
10491054
while True:
10501055
try:
10511056
r = await self.send(
@@ -1077,7 +1082,8 @@ async def get_initial_dialogs(self):
10771082

10781083
await self.get_initial_dialogs_chunk()
10791084

1080-
async def resolve_peer(self, peer_id: int or str):
1085+
async def resolve_peer(self,
1086+
peer_id: Union[int, str]):
10811087
"""Use this method to get the InputPeer of a known peer_id.
10821088
10831089
This is a utility method intended to be used only when working with Raw Functions (i.e: a Telegram API method
@@ -1146,13 +1152,13 @@ async def worker(session):
11461152

11471153
part_size = 512 * 1024
11481154
file_size = os.path.getsize(path)
1149-
1155+
11501156
if file_size == 0:
11511157
raise ValueError("File size equals to 0 B")
1152-
1158+
11531159
if file_size > 1500 * 1024 * 1024:
11541160
raise ValueError("Telegram doesn't support uploading files bigger than 1500 MiB")
1155-
1161+
11561162
file_total_parts = int(math.ceil(file_size / part_size))
11571163
is_big = file_size > 10 * 1024 * 1024
11581164
is_missing_part = file_id is not None

pyrogram/client/dispatcher/dispatcher.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import logging
2121
from collections import OrderedDict
2222

23+
import pyrogram
2324
from pyrogram.api import types
24-
from ..ext import utils
25-
from ..handlers import CallbackQueryHandler, MessageHandler, DeletedMessagesHandler, UserStatusHandler, RawUpdateHandler
25+
from ..handlers import CallbackQueryHandler, MessageHandler, RawUpdateHandler, UserStatusHandler, DeletedMessagesHandler
2626

2727
log = logging.getLogger(__name__)
2828

@@ -38,7 +38,7 @@ class Dispatcher:
3838
types.UpdateEditChannelMessage
3939
)
4040

41-
DELETE_MESSAGE_UPDATES = (
41+
DELETE_MESSAGES_UPDATES = (
4242
types.UpdateDeleteMessages,
4343
types.UpdateDeleteChannelMessages
4444
)
@@ -59,16 +59,16 @@ def __init__(self, client, workers: int):
5959
self.groups = OrderedDict()
6060

6161
async def message_parser(update, users, chats):
62-
return await utils.parse_messages(self.client, update.message, users, chats), MessageHandler
62+
return await pyrogram.Message._parse(self.client, update.message, users, chats), MessageHandler
6363

6464
async def deleted_messages_parser(update, users, chats):
65-
return utils.parse_deleted_messages(update), DeletedMessagesHandler
65+
return pyrogram.Messages._parse_deleted(self.client, update), DeletedMessagesHandler
6666

6767
async def callback_query_parser(update, users, chats):
68-
return await utils.parse_callback_query(self.client, update, users), CallbackQueryHandler
68+
return await pyrogram.CallbackQuery._parse(self.client, update, users), CallbackQueryHandler
6969

7070
async def user_status_parser(update, users, chats):
71-
return utils.parse_user_status(update.status, update.user_id), UserStatusHandler
71+
return pyrogram.UserStatus._parse(self.client, update.status, update.user_id), UserStatusHandler
7272

7373
self.update_parsers = {
7474
Dispatcher.MESSAGE_UPDATES: message_parser,

0 commit comments

Comments
 (0)