From 292a36f7608b4bb6cc3d3a7d5e9696fae62747d0 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Sat, 27 Feb 2021 15:13:53 +0100 Subject: [PATCH] Handle DestroySessionRes Should close #1706. --- telethon/network/mtprotosender.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/telethon/network/mtprotosender.py b/telethon/network/mtprotosender.py index d511e7af..1ad84923 100644 --- a/telethon/network/mtprotosender.py +++ b/telethon/network/mtprotosender.py @@ -16,11 +16,11 @@ from ..errors import ( from ..extensions import BinaryReader from ..tl.core import RpcResult, MessageContainer, GzipPacked from ..tl.functions.auth import LogOutRequest -from ..tl.functions import PingRequest +from ..tl.functions import PingRequest, DestroySessionRequest from ..tl.types import ( MsgsAck, Pong, BadServerSalt, BadMsgNotification, FutureSalts, MsgNewDetailedInfo, NewSessionCreated, MsgDetailedInfo, MsgsStateReq, - MsgsStateInfo, MsgsAllInfo, MsgResendReq, upload + MsgsStateInfo, MsgsAllInfo, MsgResendReq, upload, DestroySessionOk, DestroySessionNone, ) from ..crypto import AuthKey from ..helpers import retry_range @@ -108,6 +108,8 @@ class MTProtoSender: MsgsStateReq.CONSTRUCTOR_ID: self._handle_state_forgotten, MsgResendReq.CONSTRUCTOR_ID: self._handle_state_forgotten, MsgsAllInfo.CONSTRUCTOR_ID: self._handle_msg_all, + DestroySessionOk: self._handle_destroy_session, + DestroySessionNone: self._handle_destroy_session, } # Public API @@ -807,3 +809,19 @@ class MTProtoSender: """ Handles :tl:`MsgsAllInfo` by doing nothing (yet). """ + + async def _handle_destroy_session(self, message): + """ + Handles both :tl:`DestroySessionOk` and :tl:`DestroySessionNone`. + It behaves pretty much like handling an RPC result. + """ + for msg_id, state in self._pending_state.items(): + if isinstance(state.request, DestroySessionRequest)\ + and state.request.session_id == message.obj.session_id: + break + else: + return + + del self._pending_state[msg_id] + if not state.future.cancelled(): + state.future.set_result(message.obj)