mirror of
https://github.com/TeamPGM/pyrogram.git
synced 2024-12-03 11:03:49 +00:00
Add ActiveSessions class and session methods
Co-authored-by: Shrimadhav U K <SpEcHiDe@users.noreply.github.com>
This commit is contained in:
parent
974f47c3b8
commit
5cf43b15ed
@ -371,6 +371,8 @@ def pyrogram_api():
|
|||||||
recover_password
|
recover_password
|
||||||
accept_terms_of_service
|
accept_terms_of_service
|
||||||
log_out
|
log_out
|
||||||
|
get_active_sessions
|
||||||
|
reset_session
|
||||||
""",
|
""",
|
||||||
advanced="""
|
advanced="""
|
||||||
Advanced
|
Advanced
|
||||||
@ -592,6 +594,8 @@ def pyrogram_api():
|
|||||||
""",
|
""",
|
||||||
authorization="""
|
authorization="""
|
||||||
Authorization
|
Authorization
|
||||||
|
ActiveSession
|
||||||
|
ActiveSessions
|
||||||
SentCode
|
SentCode
|
||||||
TermsOfService
|
TermsOfService
|
||||||
"""
|
"""
|
||||||
@ -751,6 +755,10 @@ def pyrogram_api():
|
|||||||
Folder.pin_chat
|
Folder.pin_chat
|
||||||
Folder.remove_chat
|
Folder.remove_chat
|
||||||
Folder.export_link
|
Folder.export_link
|
||||||
|
""",
|
||||||
|
active_session="""
|
||||||
|
ActiveSession
|
||||||
|
ActiveSession.reset
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
17
compiler/docs/template/bound-methods.rst
vendored
17
compiler/docs/template/bound-methods.rst
vendored
@ -115,7 +115,7 @@ ChatJoinRequest
|
|||||||
{chat_join_request_toctree}
|
{chat_join_request_toctree}
|
||||||
|
|
||||||
Story
|
Story
|
||||||
---------------
|
-----
|
||||||
|
|
||||||
.. hlist::
|
.. hlist::
|
||||||
:columns: 3
|
:columns: 3
|
||||||
@ -128,7 +128,7 @@ Story
|
|||||||
{story_toctree}
|
{story_toctree}
|
||||||
|
|
||||||
Folder
|
Folder
|
||||||
---------------
|
------
|
||||||
|
|
||||||
.. hlist::
|
.. hlist::
|
||||||
:columns: 2
|
:columns: 2
|
||||||
@ -139,3 +139,16 @@ Folder
|
|||||||
:hidden:
|
:hidden:
|
||||||
|
|
||||||
{folder_toctree}
|
{folder_toctree}
|
||||||
|
|
||||||
|
ActiveSession
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. hlist::
|
||||||
|
:columns: 2
|
||||||
|
|
||||||
|
{active_session_hlist}
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
{active_session_toctree}
|
||||||
|
@ -20,11 +20,13 @@ from .accept_terms_of_service import AcceptTermsOfService
|
|||||||
from .check_password import CheckPassword
|
from .check_password import CheckPassword
|
||||||
from .connect import Connect
|
from .connect import Connect
|
||||||
from .disconnect import Disconnect
|
from .disconnect import Disconnect
|
||||||
|
from .get_active_sessions import GetActiveSessions
|
||||||
from .get_password_hint import GetPasswordHint
|
from .get_password_hint import GetPasswordHint
|
||||||
from .initialize import Initialize
|
from .initialize import Initialize
|
||||||
from .log_out import LogOut
|
from .log_out import LogOut
|
||||||
from .recover_password import RecoverPassword
|
from .recover_password import RecoverPassword
|
||||||
from .resend_code import ResendCode
|
from .resend_code import ResendCode
|
||||||
|
from .reset_session import ResetSession
|
||||||
from .send_code import SendCode
|
from .send_code import SendCode
|
||||||
from .send_recovery_code import SendRecoveryCode
|
from .send_recovery_code import SendRecoveryCode
|
||||||
from .sign_in import SignIn
|
from .sign_in import SignIn
|
||||||
@ -38,11 +40,13 @@ class Auth(
|
|||||||
CheckPassword,
|
CheckPassword,
|
||||||
Connect,
|
Connect,
|
||||||
Disconnect,
|
Disconnect,
|
||||||
|
GetActiveSessions,
|
||||||
GetPasswordHint,
|
GetPasswordHint,
|
||||||
Initialize,
|
Initialize,
|
||||||
LogOut,
|
LogOut,
|
||||||
RecoverPassword,
|
RecoverPassword,
|
||||||
ResendCode,
|
ResendCode,
|
||||||
|
ResetSession,
|
||||||
SendCode,
|
SendCode,
|
||||||
SendRecoveryCode,
|
SendRecoveryCode,
|
||||||
SignIn,
|
SignIn,
|
||||||
|
39
pyrogram/methods/auth/get_active_sessions.py
Normal file
39
pyrogram/methods/auth/get_active_sessions.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import pyrogram
|
||||||
|
from pyrogram import raw, types
|
||||||
|
|
||||||
|
|
||||||
|
class GetActiveSessions:
|
||||||
|
async def get_active_sessions(
|
||||||
|
self: "pyrogram.Client"
|
||||||
|
) -> "types.ActiveSessions":
|
||||||
|
"""Returns all active sessions of the current user.
|
||||||
|
|
||||||
|
.. include:: /_includes/usable-by/users.rst
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`~pyrogram.types.ActiveSessions`: On success, all the active sessions of the current user is returned.
|
||||||
|
|
||||||
|
"""
|
||||||
|
r = await self.invoke(
|
||||||
|
raw.functions.account.GetAuthorizations()
|
||||||
|
)
|
||||||
|
|
||||||
|
return types.ActiveSessions._parse(r)
|
40
pyrogram/methods/auth/reset_session.py
Normal file
40
pyrogram/methods/auth/reset_session.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import pyrogram
|
||||||
|
from pyrogram import raw
|
||||||
|
|
||||||
|
|
||||||
|
class ResetSession:
|
||||||
|
async def reset_session(
|
||||||
|
self: "pyrogram.Client",
|
||||||
|
id: int
|
||||||
|
) -> bool:
|
||||||
|
"""Log out an active authorized session by its hash.
|
||||||
|
|
||||||
|
.. include:: /_includes/usable-by/users.rst
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
``bool``: On success, in case the session is destroyed, True is returned. Otherwise, False is returned.
|
||||||
|
|
||||||
|
"""
|
||||||
|
r = await self.invoke(
|
||||||
|
raw.functions.account.ResetAuthorization(hash=id)
|
||||||
|
)
|
||||||
|
|
||||||
|
return r
|
@ -16,7 +16,14 @@
|
|||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from .active_session import ActiveSession
|
||||||
|
from .active_sessions import ActiveSessions
|
||||||
from .sent_code import SentCode
|
from .sent_code import SentCode
|
||||||
from .terms_of_service import TermsOfService
|
from .terms_of_service import TermsOfService
|
||||||
|
|
||||||
__all__ = ["TermsOfService", "SentCode"]
|
__all__ = [
|
||||||
|
"ActiveSession",
|
||||||
|
"ActiveSessions",
|
||||||
|
"SentCode",
|
||||||
|
"TermsOfService",
|
||||||
|
]
|
||||||
|
179
pyrogram/types/authorization/active_session.py
Normal file
179
pyrogram/types/authorization/active_session.py
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from pyrogram import raw, utils
|
||||||
|
|
||||||
|
from ..object import Object
|
||||||
|
|
||||||
|
|
||||||
|
class ActiveSession(Object):
|
||||||
|
"""Contains information about one session in a Telegram application used by the current user. Sessions must be shown to the user in the returned order.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
id (``int``):
|
||||||
|
Session identifier.
|
||||||
|
|
||||||
|
device_model (``str``):
|
||||||
|
Model of the device the application has been run or is running on, as provided by the application.
|
||||||
|
|
||||||
|
platform (``str``):
|
||||||
|
Operating system the application has been run or is running on, as provided by the application.
|
||||||
|
|
||||||
|
system_version (``str``):
|
||||||
|
Version of the operating system the application has been run or is running on, as provided by the application.
|
||||||
|
|
||||||
|
api_id (``int``):
|
||||||
|
Telegram API identifier, as provided by the application.
|
||||||
|
|
||||||
|
application_name (``str``):
|
||||||
|
Name of the application, as provided by the application.
|
||||||
|
|
||||||
|
application_version (``str``):
|
||||||
|
The version of the application, as provided by the application.
|
||||||
|
|
||||||
|
log_in_date (:py:obj:`~datetime.datetime`, *optional*):
|
||||||
|
Point in time (Unix timestamp) when the user has logged in.
|
||||||
|
|
||||||
|
last_active_date (:py:obj:`~datetime.datetime`, *optional*):
|
||||||
|
Point in time (Unix timestamp) when the session was last used.
|
||||||
|
|
||||||
|
ip_address (``str``):
|
||||||
|
IP address from which the session was created, in human-readable format.
|
||||||
|
|
||||||
|
location (``str``):
|
||||||
|
A human-readable description of the location from which the session was created, based on the IP address.
|
||||||
|
|
||||||
|
country (``str``):
|
||||||
|
Country determined from IP.
|
||||||
|
|
||||||
|
region (``str``):
|
||||||
|
Region determined from IP.
|
||||||
|
|
||||||
|
is_current (``bool``):
|
||||||
|
True, if this session is the current session.
|
||||||
|
|
||||||
|
is_password_pending (``bool``):
|
||||||
|
True, if a 2-step verification password is needed to complete authorization of the session.
|
||||||
|
|
||||||
|
is_unconfirmed (``bool``):
|
||||||
|
True, if the session wasn't confirmed from another session.
|
||||||
|
|
||||||
|
can_accept_secret_chats (``bool``):
|
||||||
|
True, if incoming secret chats can be accepted by the session.
|
||||||
|
|
||||||
|
can_accept_calls (``bool``):
|
||||||
|
True, if incoming calls can be accepted by the session.
|
||||||
|
|
||||||
|
is_official_application (``bool``):
|
||||||
|
True, if the application is an official application or uses the api_id of an official application.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
id: int = None,
|
||||||
|
device_model: str = None,
|
||||||
|
platform: str = None,
|
||||||
|
system_version: str = None,
|
||||||
|
api_id: int = None,
|
||||||
|
application_name: str = None,
|
||||||
|
application_version: str = None,
|
||||||
|
log_in_date: datetime = None,
|
||||||
|
last_active_date: datetime = None,
|
||||||
|
ip_address: str = None,
|
||||||
|
location: str = None,
|
||||||
|
country: str = None,
|
||||||
|
region: str = None,
|
||||||
|
is_current: bool = None,
|
||||||
|
is_password_pending: bool = None,
|
||||||
|
is_unconfirmed: bool = None,
|
||||||
|
can_accept_secret_chats: bool = None,
|
||||||
|
can_accept_calls: bool = None,
|
||||||
|
is_official_application: bool = None
|
||||||
|
):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.id = id
|
||||||
|
self.device_model = device_model
|
||||||
|
self.platform = platform
|
||||||
|
self.system_version = system_version
|
||||||
|
self.api_id = api_id
|
||||||
|
self.application_name = application_name
|
||||||
|
self.application_version = application_version
|
||||||
|
self.log_in_date = log_in_date
|
||||||
|
self.last_active_date = last_active_date
|
||||||
|
self.ip_address = ip_address
|
||||||
|
self.location = location
|
||||||
|
self.country = country
|
||||||
|
self.region = region
|
||||||
|
self.is_current = is_current
|
||||||
|
self.is_password_pending = is_password_pending
|
||||||
|
self.is_unconfirmed = is_unconfirmed
|
||||||
|
self.can_accept_secret_chats = can_accept_secret_chats
|
||||||
|
self.can_accept_calls = can_accept_calls
|
||||||
|
self.is_official_application = is_official_application
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _parse(session: "raw.types.Authorization") -> "ActiveSession":
|
||||||
|
return ActiveSession(
|
||||||
|
id=session.hash,
|
||||||
|
device_model=session.device_model,
|
||||||
|
platform=session.platform,
|
||||||
|
system_version=session.system_version,
|
||||||
|
api_id=session.api_id,
|
||||||
|
application_name=session.app_name,
|
||||||
|
application_version=session.app_version,
|
||||||
|
log_in_date=utils.timestamp_to_datetime(session.date_created),
|
||||||
|
last_active_date=utils.timestamp_to_datetime(session.date_active),
|
||||||
|
ip_address=session.ip,
|
||||||
|
location=session.region,
|
||||||
|
country=session.country,
|
||||||
|
region=session.region,
|
||||||
|
is_current=getattr(session, "current", None),
|
||||||
|
is_password_pending=getattr(session, "password_pending", None),
|
||||||
|
is_unconfirmed=getattr(session, "unconfirmed", None),
|
||||||
|
can_accept_secret_chats=not getattr(session, "encrypted_requests_disabled", False),
|
||||||
|
can_accept_calls=not getattr(session, "call_requests_disabled", False),
|
||||||
|
is_official_application=getattr(session, "official_app", None)
|
||||||
|
)
|
||||||
|
|
||||||
|
async def reset(self):
|
||||||
|
"""Bound method *reset* of :obj:`~pyrogram.types.ActiveSession`.
|
||||||
|
|
||||||
|
Use as a shortcut for:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
await client.reset_session(123456789)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
await session.reset()
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True on success.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
RPCError: In case of a Telegram RPC error.
|
||||||
|
"""
|
||||||
|
|
||||||
|
return await self._client.reset_session(self.id)
|
56
pyrogram/types/authorization/active_sessions.py
Normal file
56
pyrogram/types/authorization/active_sessions.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from pyrogram import raw, types
|
||||||
|
|
||||||
|
from ..object import Object
|
||||||
|
|
||||||
|
|
||||||
|
class ActiveSessions(Object):
|
||||||
|
"""Contains a list of currently active sessions
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
inactive_session_ttl_days (``int``):
|
||||||
|
Number of days of inactivity before sessions will automatically be terminated; 1-366 days.
|
||||||
|
|
||||||
|
active_sessions (List of :obj:`~pyrogram.types.ActiveSession`):
|
||||||
|
List of sessions.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
inactive_session_ttl_days: int = None,
|
||||||
|
active_sessions: List["types.ActiveSession"] = None
|
||||||
|
):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.inactive_session_ttl_days = inactive_session_ttl_days
|
||||||
|
self.active_sessions = active_sessions
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _parse(authorizations: "raw.types.account.Authorizations") -> "ActiveSessions":
|
||||||
|
return ActiveSessions(
|
||||||
|
inactive_session_ttl_days=authorizations.authorization_ttl_days,
|
||||||
|
active_sessions=types.List([
|
||||||
|
types.ActiveSession._parse(active)
|
||||||
|
for active in authorizations.authorizations
|
||||||
|
])
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user