| import asyncio | |
| import logging | |
| from os import environ | |
| from pyrogram import Client | |
| from . import FileStream | |
| from ..config import Telegram | |
| from . import MULTI_CLIENTS, WORK_LOADS | |
| 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") | |