Reset TelegramClient completely on AuthKeyDuplicatedError
This commit is contained in:
@@ -129,9 +129,9 @@ class AbstractUser(ABC):
|
|||||||
def _init_client(self) -> None:
|
def _init_client(self) -> None:
|
||||||
self.log.debug(f"Initializing client for {self.name}")
|
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"]:
|
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.ip"],
|
||||||
config["telegram.server.port"])
|
config["telegram.server.port"])
|
||||||
|
|
||||||
@@ -145,10 +145,10 @@ class AbstractUser(ABC):
|
|||||||
appversion = config["telegram.device_info.app_version"]
|
appversion = config["telegram.device_info.app_version"]
|
||||||
connection, proxy = self._proxy_settings
|
connection, proxy = self._proxy_settings
|
||||||
|
|
||||||
assert isinstance(self.session, Session)
|
assert isinstance(session, Session)
|
||||||
|
|
||||||
self.client = MautrixTelegramClient(
|
self.client = MautrixTelegramClient(
|
||||||
session=self.session,
|
session=session,
|
||||||
|
|
||||||
api_id=config["telegram.api_id"],
|
api_id=config["telegram.api_id"],
|
||||||
api_hash=config["telegram.api_hash"],
|
api_hash=config["telegram.api_hash"],
|
||||||
|
|||||||
@@ -210,7 +210,13 @@ class User(AbstractUser, BaseUser):
|
|||||||
self.log.warning("Got AuthKeyDuplicatedError in start()")
|
self.log.warning("Got AuthKeyDuplicatedError in start()")
|
||||||
await self.push_bridge_state(BridgeStateEvent.BAD_CREDENTIALS,
|
await self.push_bridge_state(BridgeStateEvent.BAD_CREDENTIALS,
|
||||||
error="tg-auth-key-duplicated")
|
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:
|
except Exception:
|
||||||
await self.push_bridge_state(BridgeStateEvent.UNKNOWN_ERROR)
|
await self.push_bridge_state(BridgeStateEvent.UNKNOWN_ERROR)
|
||||||
raise
|
raise
|
||||||
|
|||||||
Reference in New Issue
Block a user