mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-01-24 16:24:15 +03:00
Add interactive_login
This commit is contained in:
parent
aa83e7b043
commit
03a85dfd1a
|
@ -1,5 +1,7 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import getpass
|
||||
import re
|
||||
from typing import TYPE_CHECKING, Optional, Union
|
||||
|
||||
from ...mtproto import RpcError
|
||||
|
@ -125,6 +127,67 @@ async def sign_in(
|
|||
return await complete_login(self, result)
|
||||
|
||||
|
||||
async def interactive_login(self: Client) -> User:
|
||||
try:
|
||||
return await self.get_me()
|
||||
except RpcError as e:
|
||||
if e.code != 401:
|
||||
raise
|
||||
|
||||
phone_or_token = ""
|
||||
while not re.match(r"\+?[\s()]*\d", phone_or_token):
|
||||
print("Please enter your phone (+1 23...) or bot token (12:abcd...)")
|
||||
phone_or_token = input(": ").strip()
|
||||
|
||||
# Bot flow
|
||||
if re.match(r"\d+:", phone_or_token):
|
||||
user = await self.bot_sign_in(phone_or_token)
|
||||
try:
|
||||
print("Signed in as bot:", user.full_name)
|
||||
except UnicodeEncodeError:
|
||||
print("Signed in as bot")
|
||||
|
||||
return user
|
||||
|
||||
# User flow
|
||||
login_token = await self.request_login_code(phone_or_token)
|
||||
|
||||
while True:
|
||||
code = input("Please enter the code you received: ")
|
||||
try:
|
||||
user_or_token = await self.sign_in(login_token, code)
|
||||
except RpcError as e:
|
||||
if e.name.startswith("PHONE_CODE"):
|
||||
print("Invalid code:", e)
|
||||
else:
|
||||
raise
|
||||
else:
|
||||
break
|
||||
|
||||
if isinstance(user_or_token, PasswordToken):
|
||||
while True:
|
||||
print("Please enter your password (prompt is hidden; type and press enter)")
|
||||
password = getpass.getpass(": ")
|
||||
try:
|
||||
user = await self.check_password(user_or_token, password)
|
||||
except RpcError as e:
|
||||
if e.name.startswith("PASSWORD"):
|
||||
print("Invalid password:", e)
|
||||
else:
|
||||
raise
|
||||
else:
|
||||
user = user_or_token
|
||||
|
||||
try:
|
||||
print("Signed in as user:", user.full_name)
|
||||
except UnicodeEncodeError:
|
||||
print("Signed in as user")
|
||||
|
||||
print("Remember to not break the ToS or you will risk an account ban!")
|
||||
print("https://telegram.org/tos & https://core.telegram.org/api/terms")
|
||||
return user
|
||||
|
||||
|
||||
async def get_password_information(client: Client) -> PasswordToken:
|
||||
result = client(functions.account.get_password())
|
||||
assert isinstance(result, types.account.Password)
|
||||
|
|
|
@ -204,8 +204,8 @@ class Client:
|
|||
) -> Optional[Filter]:
|
||||
return get_handler_filter(self, handler)
|
||||
|
||||
async def get_me(self) -> None:
|
||||
await get_me(self)
|
||||
async def get_me(self) -> User:
|
||||
return await get_me(self)
|
||||
|
||||
def get_messages(
|
||||
self,
|
||||
|
|
|
@ -10,7 +10,7 @@ if TYPE_CHECKING:
|
|||
from .client import Client
|
||||
|
||||
|
||||
async def get_me(self: Client) -> None:
|
||||
async def get_me(self: Client) -> User:
|
||||
self
|
||||
raise NotImplementedError
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user