@Stepashka20

Как прикрепить декораторы в цикле?

Делаю бота в телеграмме,который считывает сообщения с нескольких аккаунтов.Для получение сообщений используется следующая конструкция:
@clien1t.on(events.NewMessage)
async def handler(event):
        word = event.message.to_dict()['message']
        if (word[:18] == "Код подтверждения:"):
            print(word)

Для 1 клиента так работает.Затем 2 клиента:
@client1.on(events.NewMessage)
@client2.on(events.NewMessage)
async def handler(event):
        word = event.message.to_dict()['message']
        if (word[:18] == "Код подтверждения:"):
            print(word)

И так всё работает - то есть принимает все сообщения с 2-х аккаунтов.Но как мне в цикле привязать,например, 10 аккаунтов?Я конечно могу написать
@client1.on(events.NewMessage)
@client2.on(events.NewMessage)
@client3.on(events.NewMessage)
@client4.on(events.NewMessage)
...
@client10.on(events.NewMessage)

Но это будет не удобно и не расширяемо.Попробовал вот так:
for i in range(3):
    client = TelegramClient(session_names[i], api_id, api_hash)
    clients.append(client)
    testclient=clients[i]
    @testclient.on(events.NewMessage)
    async def handler(event):
        word = event.message.to_dict()['message']
        if (word[:18] == "Код подтверждения:"):
            print(word)

Но этим способом читаются сообщения только последнего аккаунта(то есть третьего,а первый и второй аккаунт игнорируется).Как привязать к этой функции несколько декораторов в цикле?
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@javedimka
Хочу сока
Можно просто почитать как работают декораторы и что есть синтаксический сахар
async def handler(event):
        word = event.message.to_dict()['message']
        if (word[:18] == "Код подтверждения:"):
            print(word)

for client in clients:
    handler = client.on(events.NewMessage)(handler)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы