mirror of
https://github.com/pyrogram/pyrogram
synced 2025-08-29 13:27:47 +00:00
Add smarter auth import to deal with race conditions by multi sessions
- Add a retry mechanism (up to three times) - Narrow the window in which export+import executes - Remove a line of duplicated code Fixes #299
This commit is contained in:
parent
5665f980ea
commit
c1321a4c01
@ -45,7 +45,7 @@ from pyrogram.errors import (
|
||||
PhoneCodeExpired, PhoneCodeEmpty, SessionPasswordNeeded,
|
||||
PasswordHashInvalid, FloodWait, PeerIdInvalid, FirstnameInvalid, PhoneNumberBanned,
|
||||
VolumeLocNotFound, UserMigrate, ChannelPrivate, PhoneNumberOccupied,
|
||||
PasswordRecoveryNa, PasswordEmpty
|
||||
PasswordRecoveryNa, PasswordEmpty, AuthBytesInvalid
|
||||
)
|
||||
from pyrogram.session import Auth, Session
|
||||
from .ext import utils, Syncer, BaseClient, Dispatcher
|
||||
@ -1229,7 +1229,7 @@ class Client(Methods, BaseClient):
|
||||
def load_config(self):
|
||||
parser = ConfigParser()
|
||||
parser.read(str(self.config_file))
|
||||
|
||||
|
||||
if self.bot_token:
|
||||
pass
|
||||
else:
|
||||
@ -1720,30 +1720,35 @@ class Client(Methods, BaseClient):
|
||||
|
||||
if session is None:
|
||||
if dc_id != self.storage.dc_id:
|
||||
exported_auth = self.send(
|
||||
functions.auth.ExportAuthorization(
|
||||
dc_id=dc_id
|
||||
)
|
||||
)
|
||||
|
||||
session = Session(self, dc_id, Auth(self, dc_id).create(), is_media=True)
|
||||
|
||||
session.start()
|
||||
|
||||
self.media_sessions[dc_id] = session
|
||||
|
||||
session.send(
|
||||
functions.auth.ImportAuthorization(
|
||||
id=exported_auth.id,
|
||||
bytes=exported_auth.bytes
|
||||
for _ in range(3):
|
||||
exported_auth = self.send(
|
||||
functions.auth.ExportAuthorization(
|
||||
dc_id=dc_id
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
try:
|
||||
session.send(
|
||||
functions.auth.ImportAuthorization(
|
||||
id=exported_auth.id,
|
||||
bytes=exported_auth.bytes
|
||||
)
|
||||
)
|
||||
except AuthBytesInvalid:
|
||||
continue
|
||||
else:
|
||||
break
|
||||
else:
|
||||
session.stop()
|
||||
raise AuthBytesInvalid
|
||||
else:
|
||||
session = Session(self, dc_id, self.storage.auth_key, is_media=True)
|
||||
|
||||
session.start()
|
||||
|
||||
self.media_sessions[dc_id] = session
|
||||
self.media_sessions[dc_id] = session
|
||||
|
||||
if media_type == 1:
|
||||
location = types.InputPeerPhotoFileLocation(
|
||||
|
Loading…
x
Reference in New Issue
Block a user