как создать и обрабатывать несколько клиентов в pyrogram

Рейтинг: 1Ответов: 1Опубликовано: 23.02.2023

как сделать список с клиентами pyrogram и обрабатывать сообщения с них и как добавить новых клиентов в список когда уже обрабатываются другие клиенты.

for app in apps:

    @app.on_message()
    async def handler(msg: types.Message):
        print(app.name + ': ' + msg.text)

я предстовляю что-то типа этого но как добавлять в этот список pyrogram.Client()ы когда программа уже запущена?

всё это должно быть асинхронным

и наверное нужно использовать потоки но я не умею с ними работать, помогите)

Ответы

▲ 0

Данный код демонстрирует:

  • Создание нескольких клиентов 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')