@Shkarol

Как сделать так, чтобы при написании команды, начался обратный отсчёт?

Есть переменная users, которая хранит в себе список user_id пользователей Telegram. У каждого пользователя в Базе Данных есть время в секундах, которое хранится в ячейке time_tracking. Как сделать так, чтобы когда админ писал команду start_tracker - начинался обратный отсчёт у всех пользователей? Я написал вот такой код, но он начинает отсчёт только у того, кто её написал (у админа)

Использую: Aiogram, SQLite

elif 'start_tracker'.lower() in message.text.lower():
    users = [765963392, 6537306686]
    for user in users:
        timer_seconds = int(db.get_time_tracking(user))
        new_message = await bot.send_message(user, f'{timer_seconds}')
        for seconds_left in range(timer_seconds - 1, -1, -1):
            await asyncio.sleep(1)
            db.set_time_tracking(user, seconds_left)
            await new_message.edit_text(f'{seconds_left}')

        await bot.send_message(user, f'Всё!')
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
@twistfire92
Python backend developer
Программа делает ровно то, что вы ей указали. Берет пользователя, и начинает ему показывать обратный отсчет. Потом берет второго пользователя и делает то же самое. И т.д., пока пользователи не закончатся.

Если вы хотите чтобы все было одновременно, вам следует одновременно все это запускать. Сначала получше изучите асинхронность, потом напишите асинхронную функцию которая принимает на вход id пользователя, запрашивает его количество секунд и пр. По сути функция должна делать все то, что описано у вас в теле цикла.

И потом можно попробовать запустить это все, например, через asyncio.gather().

Сразу предупрежу, что если будет много таких пользователей, есть риск схватить временную блокировку от серверов телеги из-за большого количества запросов. Лучше изучите информацию о том, какие есть ограничения по частоте запросов к серверам телеги.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы