mirror of
https://github.com/pyrogram/pyrogram
synced 2025-08-28 12:57:52 +00:00
Add takeout parameter in Client
This lets the client use a takeout session instead of a normal one. Takeout sessions are useful for exporting Telegram data. Methods invoked inside a takeout session are less prone to throw FloodWait exceptions.
This commit is contained in:
parent
7c008ca4e3
commit
4f6990d735
@ -157,6 +157,13 @@ class Client(Methods, BaseClient):
|
||||
When updates are disabled your client can't receive any new message.
|
||||
Useful for batch programs that don't need to deal with updates.
|
||||
Defaults to False (updates enabled and always received).
|
||||
|
||||
takeout (``bool``, *optional*):
|
||||
Pass True to let the client use a takeout session instead of a normal one, implies no_updates.
|
||||
Useful for exporting your Telegram data. Methods invoked inside a takeout session (such as get_history,
|
||||
download_media, ...) are less prone to throw FloodWait exceptions.
|
||||
Only available for users, bots will ignore this parameter.
|
||||
Defaults to False (normal session).
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
@ -180,7 +187,8 @@ class Client(Methods, BaseClient):
|
||||
workdir: str = BaseClient.WORKDIR,
|
||||
config_file: str = BaseClient.CONFIG_FILE,
|
||||
plugins_dir: str = None,
|
||||
no_updates: bool = None):
|
||||
no_updates: bool = None,
|
||||
takeout: bool = None):
|
||||
super().__init__()
|
||||
|
||||
self.session_name = session_name
|
||||
@ -205,6 +213,7 @@ class Client(Methods, BaseClient):
|
||||
self.config_file = config_file
|
||||
self.plugins_dir = plugins_dir
|
||||
self.no_updates = no_updates
|
||||
self.takeout = takeout
|
||||
|
||||
self.dispatcher = Dispatcher(self, workers)
|
||||
|
||||
@ -261,6 +270,10 @@ class Client(Methods, BaseClient):
|
||||
self.save_session()
|
||||
|
||||
if self.bot_token is None:
|
||||
if self.takeout:
|
||||
self.takeout_id = self.send(functions.account.InitTakeoutSession()).id
|
||||
log.warning("Takeout session {} initiated".format(self.takeout_id))
|
||||
|
||||
now = time.time()
|
||||
|
||||
if abs(now - self.date) > Client.OFFLINE_SLEEP:
|
||||
@ -316,6 +329,10 @@ class Client(Methods, BaseClient):
|
||||
if not self.is_started:
|
||||
raise ConnectionError("Client is already stopped")
|
||||
|
||||
if self.takeout_id:
|
||||
self.send(functions.account.FinishTakeoutSession())
|
||||
log.warning("Takeout session {} finished".format(self.takeout_id))
|
||||
|
||||
Syncer.remove(self)
|
||||
self.dispatcher.stop()
|
||||
|
||||
@ -954,6 +971,9 @@ class Client(Methods, BaseClient):
|
||||
if self.no_updates:
|
||||
data = functions.InvokeWithoutUpdates(data)
|
||||
|
||||
if self.takeout_id:
|
||||
data = functions.InvokeWithTakeout(self.takeout_id, data)
|
||||
|
||||
r = self.session.send(data, retries, timeout)
|
||||
|
||||
self.fetch_peers(getattr(r, "users", []))
|
||||
|
@ -90,6 +90,8 @@ class BaseClient:
|
||||
self.is_started = None
|
||||
self.is_idle = None
|
||||
|
||||
self.takeout_id = None
|
||||
|
||||
self.updates_queue = Queue()
|
||||
self.updates_workers_list = []
|
||||
self.download_queue = Queue()
|
||||
|
Loading…
x
Reference in New Issue
Block a user