import asyncio import logging from os import environ from ..config import Telegram from pyrogram import Client from . import multi_clients, work_loads, FileStream async def initialize_clients(): all_tokens = dict( (c + 1, t) for c, (_, t) in enumerate( filter( lambda n: n[0].startswith("MULTI_TOKEN"), sorted(environ.items()) ) ) ) if not all_tokens: multi_clients[0] = FileStream work_loads[0] = 0 print("No additional clients found, using default client") return async def start_client(client_id, token): try: if len(token) >= 100: session_string=token bot_token=None print(f'Starting Client - {client_id} Using Session String') else: session_string=None bot_token=token print(f'Starting Client - {client_id} Using Bot Token') if client_id == len(all_tokens): await asyncio.sleep(2) print("This will take some time, please wait...") client = await Client( name=str(client_id), api_id=Telegram.API_ID, api_hash=Telegram.API_HASH, bot_token=bot_token, sleep_threshold=Telegram.SLEEP_THRESHOLD, no_updates=True, session_string=session_string, in_memory=True, ).start() client.id = (await client.get_me()).id work_loads[client_id] = 0 return client_id, client except Exception: logging.error(f"Failed starting Client - {client_id} Error:", exc_info=True) clients = await asyncio.gather(*[start_client(i, token) for i, token in all_tokens.items()]) multi_clients.update(dict(clients)) if len(multi_clients) != 1: Telegram.MULTI_CLIENT = True print("Multi-Client Mode Enabled") else: print("No additional clients were initialized, using default client")