mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2026-01-07 15:34:52 +00:00
pyrofork: Add get_active_sessions
Stealing IDEA from hydrogram/hydrogram#41 Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
parent
9dbd784e7c
commit
7c81723649
6 changed files with 261 additions and 1 deletions
|
|
@ -395,6 +395,7 @@ def pyrogram_api():
|
||||||
recover_password
|
recover_password
|
||||||
accept_terms_of_service
|
accept_terms_of_service
|
||||||
log_out
|
log_out
|
||||||
|
get_active_sessions
|
||||||
""",
|
""",
|
||||||
advanced="""
|
advanced="""
|
||||||
Advanced
|
Advanced
|
||||||
|
|
@ -650,6 +651,8 @@ def pyrogram_api():
|
||||||
""",
|
""",
|
||||||
authorization="""
|
authorization="""
|
||||||
Authorization
|
Authorization
|
||||||
|
ActiveSession
|
||||||
|
ActiveSessions
|
||||||
SentCode
|
SentCode
|
||||||
TermsOfService
|
TermsOfService
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ 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
|
||||||
|
|
@ -39,6 +40,7 @@ class Auth(
|
||||||
CheckPassword,
|
CheckPassword,
|
||||||
Connect,
|
Connect,
|
||||||
Disconnect,
|
Disconnect,
|
||||||
|
GetActiveSessions,
|
||||||
GetPasswordHint,
|
GetPasswordHint,
|
||||||
Initialize,
|
Initialize,
|
||||||
LogOut,
|
LogOut,
|
||||||
|
|
|
||||||
40
pyrogram/methods/auth/get_active_sessions.py
Normal file
40
pyrogram/methods/auth/get_active_sessions.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/>.
|
||||||
|
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
@ -17,7 +17,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 Pyrofork. If not, see <http://www.gnu.org/licenses/>.
|
# along with Pyrofork. 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",
|
||||||
|
]
|
||||||
|
|
|
||||||
150
pyrogram/types/authorization/active_session.py
Normal file
150
pyrogram/types/authorization/active_session.py
Normal file
|
|
@ -0,0 +1,150 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
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,
|
||||||
|
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.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,
|
||||||
|
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)
|
||||||
|
)
|
||||||
58
pyrogram/types/authorization/active_sessions.py
Normal file
58
pyrogram/types/authorization/active_sessions.py
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
# 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
|
||||||
|
|
||||||
|
import pyrogram
|
||||||
|
from pyrogram import raw, types, utils
|
||||||
|
|
||||||
|
from ..object import Object
|
||||||
|
|
||||||
|
|
||||||
|
class ActiveSessions(Object):
|
||||||
|
"""Contains a list of 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 a new issue