Данный код демонстрирует:
- Создание нескольких клиентов
Pyrogram
(2) и добавление их в список clients
;
- Обработка сообщения для каждого клиента через функцию
handle_message()
;
- Создание и запуск новых клиентов через функцию
add_client_thread()
в отдельном потоке;
- Добавление новых клиентов в список
clients
через функцию add_new_client()
в отдельном потоке;
- Запуск всех клиентов, включая новых в асинхронном режиме, используя функцию
main()
, которая, в свою очередь, выполняет функцию start_clients()
.
Код решения:
import asyncio
import threading
from pyrogram import Client, filters, types
# Задаем список всех клиентов Pyrogram
clients = []
# Инициализируем стартовые клиенты, которые есть в наличии и добавляем их в список
client1 = Client('{name1}', api_id={your_api_id}, api_hash='{your_api_hash}')
client2 = Client('{name2}', api_id={your_api_id}, api_hash='{your_api_hash}')
clients.append(client1)
clients.append(client2)
# Обрабатываем сообщение для каждого клиента
for client in clients:
@client.on_message(filters.private)
async def handle_message(client, message):
print(f'{client.session_name}: {message.text}')
# Создаем и запускаем нового клиента в отдельном потоке
def add_client_thread(session_name, api_id, api_hash):
client = Client(session_name, api_id=api_id, api_hash=api_hash)
clients.append(client)
client.start()
# Добавляем нового клиента в список в отдельном потоке
def add_new_client(session_name, api_id, api_hash):
t = threading.Thread(target=add_client_thread, args=(session_name, api_id, api_hash))
t.start()
# Запускаем всех клиентов, включая новых в асинхронном режиме
async def main():
await start_clients()
add_new_client('{name3}', api_id={your_api_id}, api_hash='{your_api_hash}')
# Добавляем всех клиентов, включая новых в список
async def start_clients():
for client in clients:
await client.start()
if __name__ == '__main__':
asyncio.run(main())
Добавление клиента через Python console:
>>> from main import add_new_client
>>> add_new_client('name3', api_id=12345, api_hash='abcdefg')