|
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") |
|
|