diff --git a/telethon/telegram_bare_client.py b/telethon/telegram_bare_client.py index 7ebf5ec1..b9329689 100644 --- a/telethon/telegram_bare_client.py +++ b/telethon/telegram_bare_client.py @@ -69,6 +69,7 @@ class TelegramBareClient: def __init__(self, session, api_id, api_hash, connection_mode=ConnectionMode.TCP_FULL, + use_v6=False, proxy=None, update_workers=None, spawn_read_thread=False, @@ -82,7 +83,7 @@ class TelegramBareClient: # Determine what session object we have if isinstance(session, str) or session is None: - session = Session.try_load_or_create_new(session) + session = Session.try_load_or_create_new(session, use_v6) elif not isinstance(session, Session): raise ValueError( 'The given session must be a str or a Session instance.' diff --git a/telethon/telegram_client.py b/telethon/telegram_client.py index 5a5d99ec..6140ff59 100644 --- a/telethon/telegram_client.py +++ b/telethon/telegram_client.py @@ -69,6 +69,7 @@ class TelegramClient(TelegramBareClient): def __init__(self, session, api_id, api_hash, connection_mode=ConnectionMode.TCP_FULL, + use_v6=False, proxy=None, update_workers=None, timeout=timedelta(seconds=5), @@ -113,6 +114,7 @@ class TelegramClient(TelegramBareClient): super().__init__( session, api_id, api_hash, connection_mode=connection_mode, + use_v6=use_v6, proxy=proxy, update_workers=update_workers, spawn_read_thread=spawn_read_thread, diff --git a/telethon/tl/session.py b/telethon/tl/session.py index f597048f..6ded7dc8 100644 --- a/telethon/tl/session.py +++ b/telethon/tl/session.py @@ -18,7 +18,7 @@ class Session: If you think the session has been compromised, close all the sessions through an official Telegram client to revoke the authorization. """ - def __init__(self, session_user_id): + def __init__(self, session_user_id, use_v6=False): """session_user_id should either be a string or another Session. Note that if another session is given, only parameters like those required to init a connection will be copied. @@ -64,7 +64,10 @@ class Session: self._last_msg_id = 0 # Long # These values will be saved - self.server_address = '91.108.56.165' + if use_v6: + self.server_address = '[2001:67c:4e8:f002::a]' + else: + self.server_address = '91.108.56.165' self.port = 443 self.auth_key = None self.layer = 0 @@ -109,15 +112,15 @@ class Session: for f in os.listdir('.') if f.endswith('.session')] @staticmethod - def try_load_or_create_new(session_user_id): + def try_load_or_create_new(session_user_id, use_v6=False): """Loads a saved session_user_id.session or creates a new one. If session_user_id=None, later .save()'s will have no effect. """ if session_user_id is None: - return Session(None) + return Session(None, use_v6) else: path = '{}.session'.format(session_user_id) - result = Session(session_user_id) + result = Session(session_user_id, use_v6) if not file_exists(path): return result