| |
| |
| |
| |
| |
| |
|
|
| import base64 |
| import ipaddress |
| import struct |
| import sys |
|
|
| from telethon.errors.rpcerrorlist import AuthKeyDuplicatedError |
| from telethon.sessions.string import _STRUCT_PREFORMAT, CURRENT_VERSION, StringSession |
|
|
| from ..configs import Var |
| from . import * |
| from .BaseClient import UltroidClient |
|
|
| _PYRO_FORM = {351: ">B?256sI?", 356: ">B?256sQ?", 362: ">BI?256sQ?"} |
|
|
| |
|
|
| DC_IPV4 = { |
| 1: "149.154.175.53", |
| 2: "149.154.167.51", |
| 3: "149.154.175.100", |
| 4: "149.154.167.91", |
| 5: "91.108.56.130", |
| } |
|
|
|
|
| def validate_session(session, logger=LOGS, _exit=True): |
| from strings import get_string |
|
|
| if session: |
| |
| if session.startswith(CURRENT_VERSION): |
| if len(session.strip()) != 353: |
| logger.exception(get_string("py_c1")) |
| sys.exit() |
| return StringSession(session) |
|
|
| |
| elif len(session) in _PYRO_FORM.keys(): |
| data_ = struct.unpack( |
| _PYRO_FORM[len(session)], |
| base64.urlsafe_b64decode(session + "=" * (-len(session) % 4)), |
| ) |
| if len(session) in [351, 356]: |
| auth_id = 2 |
| else: |
| auth_id = 3 |
| dc_id, auth_key = data_[0], data_[auth_id] |
| return StringSession( |
| CURRENT_VERSION |
| + base64.urlsafe_b64encode( |
| struct.pack( |
| _STRUCT_PREFORMAT.format(4), |
| dc_id, |
| ipaddress.ip_address(DC_IPV4[dc_id]).packed, |
| 443, |
| auth_key, |
| ) |
| ).decode("ascii") |
| ) |
| else: |
| logger.exception(get_string("py_c1")) |
| if _exit: |
| sys.exit() |
| logger.exception(get_string("py_c2")) |
| if _exit: |
| sys.exit() |
|
|
|
|
| def vc_connection(udB, ultroid_bot): |
| from strings import get_string |
|
|
| VC_SESSION = Var.VC_SESSION or udB.get_key("VC_SESSION") |
| if VC_SESSION and VC_SESSION != Var.SESSION: |
| LOGS.info("Starting up VcClient.") |
| try: |
| return UltroidClient( |
| validate_session(VC_SESSION, _exit=False), |
| log_attempt=False, |
| exit_on_error=False, |
| ) |
| except (AuthKeyDuplicatedError, EOFError): |
| LOGS.info(get_string("py_c3")) |
| udB.del_key("VC_SESSION") |
| except Exception as er: |
| LOGS.info("While creating Client for VC.") |
| LOGS.exception(er) |
| return ultroid_bot |
|
|