From 13cac8db9a34710975b63ce2e0a968212ab9cd55 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 16 Aug 2021 20:54:02 +0300 Subject: [PATCH] Reset TelegramClient completely on AuthKeyDuplicatedError --- mautrix_telegram/abstract_user.py | 8 ++++---- mautrix_telegram/user.py | 8 +++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/mautrix_telegram/abstract_user.py b/mautrix_telegram/abstract_user.py index 758bcb2e..12177893 100644 --- a/mautrix_telegram/abstract_user.py +++ b/mautrix_telegram/abstract_user.py @@ -129,9 +129,9 @@ class AbstractUser(ABC): def _init_client(self) -> None: self.log.debug(f"Initializing client for {self.name}") - self.session = self.session_container.new_session(self.name) + session = self.session_container.new_session(self.name) if config["telegram.server.enabled"]: - self.session.set_dc(config["telegram.server.dc"], + session.set_dc(config["telegram.server.dc"], config["telegram.server.ip"], config["telegram.server.port"]) @@ -145,10 +145,10 @@ class AbstractUser(ABC): appversion = config["telegram.device_info.app_version"] connection, proxy = self._proxy_settings - assert isinstance(self.session, Session) + assert isinstance(session, Session) self.client = MautrixTelegramClient( - session=self.session, + session=session, api_id=config["telegram.api_id"], api_hash=config["telegram.api_hash"], diff --git a/mautrix_telegram/user.py b/mautrix_telegram/user.py index 03ccb722..36262cdd 100644 --- a/mautrix_telegram/user.py +++ b/mautrix_telegram/user.py @@ -210,7 +210,13 @@ class User(AbstractUser, BaseUser): self.log.warning("Got AuthKeyDuplicatedError in start()") await self.push_bridge_state(BridgeStateEvent.BAD_CREDENTIALS, error="tg-auth-key-duplicated") - # Don't return, let the session be deleted if delete_unless_authenticated is true + await self.client.disconnect() + self.client.session.delete() + self.client = None + if not delete_unless_authenticated: + # The caller wants the client to be connected, so restart the connection. + await super().start() + return self except Exception: await self.push_bridge_state(BridgeStateEvent.UNKNOWN_ERROR) raise