Skip to content

Commit 830edcf

Browse files
Added support for setting email during authorization
1 parent 0057216 commit 830edcf

1 file changed

Lines changed: 63 additions & 23 deletions

File tree

pyrogram/client.py

Lines changed: 63 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,35 @@
2929
from datetime import datetime, timedelta
3030
from hashlib import sha256
3131
from importlib import import_module
32-
from io import StringIO, BytesIO
32+
from io import BytesIO, StringIO
3333
from mimetypes import MimeTypes
3434
from pathlib import Path
35-
from typing import Union, List, Optional, Callable, AsyncGenerator, Type
35+
from typing import AsyncGenerator, Callable, List, Optional, Type, Union
3636

3737
import pyrogram
38-
from pyrogram import __version__, __license__
39-
from pyrogram import enums
40-
from pyrogram import raw
41-
from pyrogram import utils
38+
from pyrogram import __license__, __version__, enums, raw, utils
4239
from pyrogram.crypto import aes
43-
from pyrogram.errors import CDNFileHashMismatch
4440
from pyrogram.errors import (
41+
AuthBytesInvalid,
42+
BadRequest,
43+
CDNFileHashMismatch,
44+
ChannelPrivate,
45+
EmailNotAllowed,
46+
FloodPremiumWait,
47+
FloodWait,
48+
PersistentTimestampInvalid,
49+
PersistentTimestampOutdated,
4550
SessionPasswordNeeded,
46-
VolumeLocNotFound, ChannelPrivate,
47-
BadRequest, AuthBytesInvalid,
48-
FloodWait, FloodPremiumWait,
49-
PersistentTimestampInvalid, PersistentTimestampOutdated
51+
VolumeLocNotFound,
5052
)
5153
from pyrogram.handlers.handler import Handler
5254
from pyrogram.methods import Methods
55+
from pyrogram.qrlogin import QRLogin
5356
from pyrogram.session import Auth, Session
54-
from pyrogram.storage import Storage, FileStorage, MemoryStorage
55-
from pyrogram.types import User, TermsOfService, LinkPreviewOptions
57+
from pyrogram.storage import FileStorage, MemoryStorage, Storage
58+
from pyrogram.types import LinkPreviewOptions, TermsOfService, User
5659
from pyrogram.utils import ainput
57-
from pyrogram.qrlogin import QRLogin
60+
5861
from .connection import Connection
5962
from .connection.transport import TCP, TCPAbridged
6063
from .dispatcher import Dispatcher
@@ -475,16 +478,53 @@ async def authorize(self) -> User:
475478
else:
476479
break
477480

478-
sent_code_descriptions = {
479-
enums.SentCodeType.APP: "Telegram app",
480-
enums.SentCodeType.SMS: "SMS",
481-
enums.SentCodeType.CALL: "phone call",
482-
enums.SentCodeType.FLASH_CALL: "phone flash call",
483-
enums.SentCodeType.FRAGMENT_SMS: "Fragment SMS",
484-
enums.SentCodeType.EMAIL_CODE: "email code"
485-
}
481+
if sent_code.type == enums.SentCodeType.SETUP_EMAIL_REQUIRED:
482+
print("Setup email required for authorization")
483+
484+
while True:
485+
try:
486+
email = await ainput("Enter email: ", loop=self.loop)
487+
488+
await self.app.invoke(
489+
raw.functions.account.SendVerifyEmailCode(
490+
purpose=raw.types.EmailVerifyPurposeLoginSetup(
491+
phone_number=self.phone_number,
492+
phone_code_hash=sent_code.phone_code_hash,
493+
),
494+
email=email,
495+
)
496+
)
486497

487-
print(f"The confirmation code has been sent via {sent_code_descriptions[sent_code.type]}")
498+
email_code = await ainput("Enter confirmation code: ", loop=self.loop)
499+
500+
try:
501+
await self.app.invoke(
502+
raw.functions.account.VerifyEmail(
503+
purpose=raw.types.EmailVerifyPurposeLoginSetup(
504+
phone_number=self.phone_number,
505+
phone_code_hash=sent_code.phone_code_hash,
506+
),
507+
verification=raw.types.EmailVerificationCode(code=email_code),
508+
)
509+
)
510+
except EmailNotAllowed:
511+
print("This email is not allowed for authorization")
512+
continue
513+
except BadRequest as e:
514+
print(e.MESSAGE)
515+
else:
516+
break
517+
else:
518+
sent_code_descriptions = {
519+
enums.SentCodeType.APP: "Telegram app",
520+
enums.SentCodeType.SMS: "SMS",
521+
enums.SentCodeType.CALL: "phone call",
522+
enums.SentCodeType.FLASH_CALL: "phone flash call",
523+
enums.SentCodeType.FRAGMENT_SMS: "Fragment",
524+
enums.SentCodeType.EMAIL_CODE: "email code"
525+
}
526+
527+
print(f"The confirmation code has been sent via {sent_code_descriptions[sent_code.type]}")
488528

489529
while True:
490530
if not self.phone_code:

0 commit comments

Comments
 (0)