@@ -442,24 +442,70 @@ async def authorize(self) -> User:
442442 else :
443443 break
444444
445- sent_code_descriptions = {
446- enums .SentCodeType .APP : "Telegram app" ,
447- enums .SentCodeType .CALL : "phone call" ,
448- enums .SentCodeType .FLASH_CALL : "phone flash call" ,
449- enums .SentCodeType .MISSED_CALL : "" ,
450- enums .SentCodeType .SMS : "SMS" ,
451- enums .SentCodeType .FRAGMENT_SMS : "Fragment SMS" ,
452- enums .SentCodeType .FIREBASE_SMS : "SMS after Firebase attestation" ,
453- enums .SentCodeType .EMAIL_CODE : "email" ,
454- enums .SentCodeType .SETUP_EMAIL_REQUIRED : "add and verify email required" ,
455- }
456-
457- print (f"The confirmation code has been sent via { sent_code_descriptions [sent_code .type ]} " )
445+ if sent_code .type == enums .SentCodeType .SETUP_EMAIL_REQUIRED :
446+ print ("Setup email required for authorization" )
447+
448+ while True :
449+ try :
450+ while True :
451+ email = await ainput ("Enter setup email: " , loop = self .loop )
452+
453+ if not email :
454+ continue
455+
456+ confirm = await ainput (f'Is "{ email } " correct? (y/N): ' , loop = self .loop )
457+
458+ if confirm .lower () == "y" :
459+ break
460+
461+ await self .invoke (
462+ raw .functions .account .SendVerifyEmailCode (
463+ purpose = raw .types .EmailVerifyPurposeLoginSetup (
464+ phone_number = self .phone_number ,
465+ phone_code_hash = sent_code .phone_code_hash ,
466+ ),
467+ email = email ,
468+ )
469+ )
470+
471+ email_code = await ainput ("Enter confirmation code received in setup email: " , loop = self .loop )
472+
473+ email_sent_code = await self .invoke (
474+ raw .functions .account .VerifyEmail (
475+ purpose = raw .types .EmailVerifyPurposeLoginSetup (
476+ phone_number = self .phone_number ,
477+ phone_code_hash = sent_code .phone_code_hash ,
478+ ),
479+ verification = raw .types .EmailVerificationCode (code = email_code ),
480+ )
481+ )
482+
483+ if isinstance (email_sent_code , raw .types .account .EmailVerifiedLogin ):
484+ sent_code = types .SentCode ._parse (email_sent_code .sent_code )
485+ except BadRequest as e :
486+ print (e .MESSAGE )
487+ self .phone_number = None
488+ self .bot_token = None
489+ else :
490+ break
491+ else :
492+ sent_code_descriptions = {
493+ enums .SentCodeType .APP : "Telegram app" ,
494+ enums .SentCodeType .CALL : "phone call" ,
495+ enums .SentCodeType .FLASH_CALL : "phone flash call" ,
496+ enums .SentCodeType .MISSED_CALL : "" ,
497+ enums .SentCodeType .SMS : "SMS" ,
498+ enums .SentCodeType .FRAGMENT_SMS : "Fragment SMS" ,
499+ enums .SentCodeType .FIREBASE_SMS : "SMS after Firebase attestation" ,
500+ enums .SentCodeType .EMAIL_CODE : "email" ,
501+ enums .SentCodeType .SETUP_EMAIL_REQUIRED : "add and verify email required" ,
502+ }
503+
504+ print (f"The confirmation code has been sent via { sent_code_descriptions [sent_code .type ]} " )
458505
459506 while True :
460507 if not self .phone_code :
461508 self .phone_code = await ainput ("Enter confirmation code: " )
462-
463509 try :
464510 signed_in = await self .sign_in (self .phone_number , sent_code .phone_code_hash , self .phone_code )
465511 except BadRequest as e :
0 commit comments