Загрузка в режиме реального времени 1000 чатов Telegram с помощью телемарафона Python?

#python #telegram #telethon

Вопрос:

Я настроил скрипт для загрузки сообщений из тысяч супергрупп Telegram (именованных chatlist ). Это прекрасно работает, когда я использую несколько групп, однако, позволяя 1000 Является ли это правильным подходом к этому или есть более эффективный способ? Я не думаю, что это проблема с сетью, с моей стороны, так как у меня есть ГБ Интернета

 from telethon import TelegramClient, events, sync

client = TelegramClient('test', api_id, api_hash)


@client.on(events.NewMessage(chats=chatlist))
async def my_event_handler(event):
    
    message = event.message.to_dict()
    print(message['message'])
    
await client.start()
await client.run_until_disconnected()
 

Комментарии:

1. Что значит «кажется, что это сломает»?

2. @AKX, хорошая мысль — я обновил ее, извините за расплывчатость!

3. Вам, вероятно, потребуется немного отладить библиотеку, чтобы понять, почему ничего не происходит. Я бы поставил на то, что где-то есть ограничение на chats= размер.

4. как правило, когда у вас есть код, который работает для n экземпляров, вы не можете просто увеличить n на 20000% или что-то подобное и ожидать, что он будет работать. И когда вы разрабатываете код для обработки n взаимодействий, вы устанавливаете ограничения, чтобы люди не делали этого (хороший код), или ваши физические ресурсы устанавливают ограничения, когда они это делают (плохой код). Таким образом, скорее всего, вам нужно делать это по частям (возможно, параллельно).

Ответ №1:

Простым обходным решением является удаление NewMessage фильтра событий, т. е.:

 @client.on(events.NewMessage())
 

и фильтруйте сообщения внутри метода самостоятельно:

 async def my_event_handler(event):
    message = event.message.to_dict()
    input_chat = await event.get_input_chat()
    if input_chat in chatlist:
        print(message['message'])
 

Вы не упомянули , что внутри chatlist , поэтому я предположил, что это список InputChat предметов.

Обратите внимание, что если ваш список чатов представляет собой список @username строк, вы скоро достигнете ограничений на разрешение имени пользователя Telegram. Всегда есть InputChat или длинные идентификаторы в списке чата.