Как остановить выполнение цикла while при нажатии на кнопку InlineKeyboardButton?

Как можно остановить цикл в боте по нажатию кнопки?
  • 28 марта 2024 г. 15:29
Ответы на вопрос 3
Для того чтобы остановить выполнение цикла while при нажатии на кнопку InlineKeyboardButton в телеграм-боте, можно использовать переменную-флаг, которая будет изменяться при нажатии на кнопку. Например:

```python
flag = False

def start(bot, update):
    global flag
    flag = True
    while flag:
        # ваш код цикла

def stop(bot, update):
    global flag
    flag = False
```

В данном примере, при нажатии на кнопку "стоп" будет изменяться значение переменной flag на False, что приведет к остановке выполнения цикла while. 

Также, можно использовать другие способы для остановки цикла, например, использование функции break внутри цикла при определенном условии.
В while поменяйте OR на AND.
Начинайте думать асинхронно и в терминах потоков, которые выполняются паралельно. 
Как подобное реализовать.
бот получил команду начать цикл.
быстро ответил сообщением и запомнил номер для последующего его редактирования.
апи телеграма получило свой ответ в установленное время.
Теперь запускается новый поток, который проверяет из главного флаг (надоПрерваться)
если прошло время ожидания и нет команды остановиться - послать апи команду редактирования сообщения
заснуть до следующего раза

Если пришла команда остановиться, то поставить флаг в Труе. Ответить апи формальным ответом, что команда принята.

Все это делать с учетом, что разные пользователи могут использовать бот одновременно. То есть все еще привязовать к тиду пользователя. У каждого свой тред и флаг.

В дальнейшем подумать как не плодить треды на каждого.
Похожие вопросы