mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-02-10 00:21:02 +03:00
Add Client.get_authorizations method and accompanying types
This commit is contained in:
parent
91e997ed15
commit
1fccaac43f
|
@ -9,7 +9,7 @@ from ...mtproto import RpcError
|
||||||
from ...session import DataCenter
|
from ...session import DataCenter
|
||||||
from ...session import User as SessionUser
|
from ...session import User as SessionUser
|
||||||
from ...tl import abcs, functions, types
|
from ...tl import abcs, functions, types
|
||||||
from ..types import LoginToken, PasswordToken, User
|
from ..types import Authorizations, LoginToken, PasswordToken, User
|
||||||
from .net import connect_sender
|
from .net import connect_sender
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
@ -266,3 +266,15 @@ async def sign_out(self: Client) -> None:
|
||||||
self._session.user = None
|
self._session.user = None
|
||||||
self._session.state = None
|
self._session.state = None
|
||||||
await self._storage.save(self._session)
|
await self._storage.save(self._session)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_authorizations(self: Client) -> Optional[Authorizations]:
|
||||||
|
try:
|
||||||
|
result = await self(functions.account.get_authorizations())
|
||||||
|
except RpcError as e:
|
||||||
|
if e.code == 401:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
return Authorizations._from_raw(self, result)
|
||||||
|
|
|
@ -30,6 +30,7 @@ from ..types import (
|
||||||
AdminRight,
|
AdminRight,
|
||||||
AlbumBuilder,
|
AlbumBuilder,
|
||||||
AsyncList,
|
AsyncList,
|
||||||
|
Authorizations,
|
||||||
Channel,
|
Channel,
|
||||||
ChatRestriction,
|
ChatRestriction,
|
||||||
Dialog,
|
Dialog,
|
||||||
|
@ -51,6 +52,7 @@ from ..types import (
|
||||||
from .auth import (
|
from .auth import (
|
||||||
bot_sign_in,
|
bot_sign_in,
|
||||||
check_password,
|
check_password,
|
||||||
|
get_authorizations,
|
||||||
interactive_login,
|
interactive_login,
|
||||||
is_authorized,
|
is_authorized,
|
||||||
request_login_code,
|
request_login_code,
|
||||||
|
@ -681,6 +683,25 @@ class Client:
|
||||||
"""
|
"""
|
||||||
return get_admin_log(self, chat)
|
return get_admin_log(self, chat)
|
||||||
|
|
||||||
|
async def get_authorizations(self) -> Optional[Authorizations]:
|
||||||
|
"""
|
||||||
|
Gets all current authorizations (sessions) of the logged in user.
|
||||||
|
|
||||||
|
:return:
|
||||||
|
The authorizations (sessions) associated with the logged-in account, or :data:`None` if the client is not authorized.
|
||||||
|
|
||||||
|
.. rubric:: Example
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
authorizations = await client.get_authorizations()
|
||||||
|
assert authorizations is not None, "not logged in!"
|
||||||
|
|
||||||
|
for auth in authorizations.sessions:
|
||||||
|
print(auth.device_model, auth.platform, auth.app_name)
|
||||||
|
"""
|
||||||
|
return await get_authorizations(self)
|
||||||
|
|
||||||
def get_contacts(self) -> AsyncList[User]:
|
def get_contacts(self) -> AsyncList[User]:
|
||||||
"""
|
"""
|
||||||
Get the users in your contact list.
|
Get the users in your contact list.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from .admin_right import AdminRight
|
from .admin_right import AdminRight
|
||||||
from .album_builder import AlbumBuilder
|
from .album_builder import AlbumBuilder
|
||||||
from .async_list import AsyncList
|
from .async_list import AsyncList
|
||||||
|
from .authorizations import Authorizations, Authorization
|
||||||
from .callback_answer import CallbackAnswer
|
from .callback_answer import CallbackAnswer
|
||||||
from .chat_restriction import ChatRestriction
|
from .chat_restriction import ChatRestriction
|
||||||
from .dialog import Dialog
|
from .dialog import Dialog
|
||||||
|
|
144
client/src/telethon/_impl/client/types/authorizations.py
Normal file
144
client/src/telethon/_impl/client/types/authorizations.py
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING, List, Optional
|
||||||
|
|
||||||
|
from typing_extensions import Self
|
||||||
|
|
||||||
|
from ...tl import abcs
|
||||||
|
from .meta import NoPublicConstructor
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from ..client.client import Client
|
||||||
|
|
||||||
|
|
||||||
|
class Authorizations(metaclass=NoPublicConstructor):
|
||||||
|
"""
|
||||||
|
Authorizations, logged in sessions.
|
||||||
|
|
||||||
|
You can get a user's authorizations from methods such as :meth:`telethon.Client.get_authorizations`.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
client: Client,
|
||||||
|
raw: abcs.account.Authorizations,
|
||||||
|
) -> None:
|
||||||
|
assert isinstance(raw, abcs.account.Authorizations)
|
||||||
|
self._client = client
|
||||||
|
self._raw = raw
|
||||||
|
self._authorizations = [Authorization._from_raw(client, auth) for auth in self._raw.authorizations]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _from_raw(
|
||||||
|
cls,
|
||||||
|
client: Client,
|
||||||
|
authorizations: abcs.account.Authorizations,
|
||||||
|
) -> Self:
|
||||||
|
return cls._create(client, authorizations)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ttl_days(self) -> int:
|
||||||
|
return self._raw.authorization_ttl_days
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sessions(self) -> List[abcs.Authorization]:
|
||||||
|
return self._authorizations
|
||||||
|
|
||||||
|
|
||||||
|
class Authorization(metaclass=NoPublicConstructor):
|
||||||
|
"""
|
||||||
|
A single authorization.
|
||||||
|
|
||||||
|
This will only be constructed as part of :meth:`telethon.Client.get_authorizations`.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
client: Client,
|
||||||
|
raw: abcs.Authorization,
|
||||||
|
) -> None:
|
||||||
|
assert isinstance(raw, abcs.Authorization)
|
||||||
|
self._client = client
|
||||||
|
self._raw = raw
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _from_raw(
|
||||||
|
cls,
|
||||||
|
client: Client,
|
||||||
|
authorization: abcs.Authorization,
|
||||||
|
) -> Self:
|
||||||
|
return cls._create(client, authorization)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def api_id(self) -> int:
|
||||||
|
return self._raw.api_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def app_name(self) -> str:
|
||||||
|
return self._raw.app_name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def app_version(self) -> str:
|
||||||
|
return self._raw.app_version
|
||||||
|
|
||||||
|
@property
|
||||||
|
def call_requests_disabled(self) -> bool:
|
||||||
|
return self._raw.call_requests_disabled
|
||||||
|
|
||||||
|
@property
|
||||||
|
def country(self) -> str:
|
||||||
|
return self._raw.country
|
||||||
|
|
||||||
|
@property
|
||||||
|
def current(self) -> bool:
|
||||||
|
return self._raw.current
|
||||||
|
|
||||||
|
@property
|
||||||
|
def date_active(self) -> int:
|
||||||
|
return self._raw.date_active
|
||||||
|
|
||||||
|
@property
|
||||||
|
def date_created(self) -> int:
|
||||||
|
return self._raw.date_created
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_model(self) -> str:
|
||||||
|
return self._raw.device_model
|
||||||
|
|
||||||
|
@property
|
||||||
|
def encrypted_requests_disabled(self) -> bool:
|
||||||
|
return self._raw.encrypted_requests_disabled
|
||||||
|
|
||||||
|
@property
|
||||||
|
def hash(self) -> int:
|
||||||
|
return self._raw.hash
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ip(self) -> Optional[str]:
|
||||||
|
if self._raw.ip == '':
|
||||||
|
return None
|
||||||
|
return self._raw.ip
|
||||||
|
|
||||||
|
@property
|
||||||
|
def official_app(self) -> bool:
|
||||||
|
return self._raw.official_app
|
||||||
|
|
||||||
|
@property
|
||||||
|
def password_pending(self) -> bool:
|
||||||
|
return self._raw.password_pending
|
||||||
|
|
||||||
|
@property
|
||||||
|
def platform(self) -> str:
|
||||||
|
return self._raw.platform
|
||||||
|
|
||||||
|
@property
|
||||||
|
def region(self) -> str:
|
||||||
|
return self._raw.region
|
||||||
|
|
||||||
|
@property
|
||||||
|
def system_version(self) -> str:
|
||||||
|
return self._raw.system_version
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unconfirmed(self) -> bool:
|
||||||
|
return self._raw.unconfirmed
|
Loading…
Reference in New Issue
Block a user