@Filipinnetc

Python pyrogram telegram bot бесконечный цикл и события?

Я хочу запустить мою программу одновременно с циклом бесконечным и обработчиками событий от зависимости pyrogram (для создания телеграм ботов). Обработчики событий для реагирования на новые сообщения работают если убрать из кода ниже цикл, если его вставить то только этот цикл будет выполняться.
А ещё
app.run() just blocks the thread and app.start() only doesn't work and when I add that idle() it blocks again..

import threading
import time
import sys
from pyrogram import Client
#from pyrogram import filters
from pyrogram import idle

app = Client("my_account")

@app.on_message()
async def my_handler(client, message):
    print(message)
    #await message.reply_text("Hello, async world!")

print("Python version")
print (sys.version)

#app.run()
app.start()
#idle()

#while loop - my program runs here....
i = 0
while(True):
    print("looping...")
    time.sleep(2)
    i = i + 1
    if i > 5:
        break
  • Вопрос задан
  • 1139 просмотров
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
Идея простая: опрос (polling) либо хук (webhooks). В первом случае вы бесконечно в цикле опрашиваете телегу о новых сообщениях, во втором - телега самостоятельно присылает новые сообщения на ваш сервер.

Также важно заметить, что в однопоточной программе может быть одновременно запущен только один поток (это логично). Поэтому вы не можете одновременно с опросом бота из телеги запустить свой бесконечный цикл.

Из этого следует, что вам нужно либо подписаться на событие аля on_update, либо в своём цикле вызывать каждый раз update бота:
while(True):
    app._update() # там должен быть некий скрытый метод
    time.sleep(0.1) # если убрать sleep, то будут реальные fps, но многократно возрастёт нагрузка на цп в лс
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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