diff --git a/pyrogram/connection/connection.py b/pyrogram/connection/connection.py index 5aac9038..d3bf6b28 100644 --- a/pyrogram/connection/connection.py +++ b/pyrogram/connection/connection.py @@ -38,12 +38,13 @@ class Connection: 4: TCPIntermediateO } - def __init__(self, dc_id: int, test_mode: bool, ipv6: bool, proxy: dict, mode: int = 3): + def __init__(self, dc_id: int, test_mode: bool, ipv6: bool, proxy: dict, media: bool = False, mode: int = 3): self.dc_id = dc_id self.test_mode = test_mode self.ipv6 = ipv6 self.proxy = proxy - self.address = DataCenter(dc_id, test_mode, ipv6) + self.media = media + self.address = DataCenter(dc_id, test_mode, ipv6, media) self.mode = self.MODES.get(mode, TCPAbridged) self.protocol = None # type: TCP @@ -60,11 +61,13 @@ class Connection: self.protocol.close() await asyncio.sleep(1) else: - log.info("Connected! {} DC{} - IPv{} - {}".format( + log.info("Connected! {} DC{} - IPv{} - {}{} {}".format( "Test" if self.test_mode else "Production", self.dc_id, "6" if self.ipv6 else "4", - self.mode.__name__ + self.mode.__name__, + " (media)" if self.media else "", + self.address )) break else: diff --git a/pyrogram/session/internals/data_center.py b/pyrogram/session/internals/data_center.py index 566bd79e..3c9e9567 100644 --- a/pyrogram/session/internals/data_center.py +++ b/pyrogram/session/internals/data_center.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +from typing import Tuple + + class DataCenter: TEST = { 1: "149.154.175.10", 2: "149.154.167.40", 3: "149.154.175.117", - 121: "95.213.217.195" } PROD = { @@ -29,15 +31,18 @@ class DataCenter: 2: "149.154.167.51", 3: "149.154.175.100", 4: "149.154.167.91", - 5: "91.108.56.130", - 121: "95.213.217.195" + 5: "91.108.56.130" + } + + PROD_MEDIA = { + 2: "149.154.167.151", + 4: "149.154.164.250" } TEST_IPV6 = { 1: "2001:b28:f23d:f001::e", 2: "2001:67c:4e8:f002::e", 3: "2001:b28:f23d:f003::e", - 121: "2a03:b0c0:3:d0::114:d001" } PROD_IPV6 = { @@ -45,20 +50,32 @@ class DataCenter: 2: "2001:67c:4e8:f002::a", 3: "2001:b28:f23d:f003::a", 4: "2001:67c:4e8:f004::a", - 5: "2001:b28:f23f:f005::a", - 121: "2a03:b0c0:3:d0::114:d001" + 5: "2001:b28:f23f:f005::a" } - def __new__(cls, dc_id: int, test_mode: bool, ipv6: bool): - if ipv6: - return ( - (cls.TEST_IPV6[dc_id], 80) - if test_mode - else (cls.PROD_IPV6[dc_id], 443) - ) + PROD_IPV6_MEDIA = { + 2: "2001:067c:04e8:f002:0000:0000:0000:000b", + 4: "2001:067c:04e8:f004:0000:0000:0000:000b" + } + + def __new__(cls, dc_id: int, test_mode: bool, ipv6: bool, media: bool) -> Tuple[str, int]: + if test_mode: + if ipv6: + ip = cls.TEST_IPV6[dc_id] + else: + ip = cls.TEST[dc_id] + + return ip, 80 else: - return ( - (cls.TEST[dc_id], 80) - if test_mode - else (cls.PROD[dc_id], 443) - ) + if ipv6: + if media: + ip = cls.PROD_IPV6_MEDIA.get(dc_id, cls.PROD_IPV6[dc_id]) + else: + ip = cls.PROD_IPV6[dc_id] + else: + if media: + ip = cls.PROD_MEDIA.get(dc_id, cls.PROD[dc_id]) + else: + ip = cls.PROD[dc_id] + + return ip, 443 diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index 686531e3..f4642e58 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -120,7 +120,8 @@ class Session: self.dc_id, self.test_mode, self.client.ipv6, - self.client.proxy + self.client.proxy, + self.is_media ) try: