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