Задать вопрос
@Jfr0s

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

Я пишу бота в телеграм, создал функцию чтобы каждые 30 минут отправлялось сообщение. Но никак не могу зделать так чтобы отправление можно было включить и выключить пж помогите!!!!

@bot.message_handler(commands=['☁️remind☁️'])
def remind_start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    but1 = types.KeyboardButton("Включити нагадування")
    but2 = types.KeyboardButton("Виключити нагадування")
    markup.add(but1, but2)
    r_mes = bot.send_message(
        message.chat.id, "Виберіть один з двох варіантів:", parse_mode='html', reply_markup=markup)
    bot.register_next_step_handler(r_mes, r_check_mes)

def r_check_mes(message):
    x = message.text
    if x == 'Включити нагадування':
        while True:
            bot.send_message(message.chat.id, "текст", parse_mode='html')
            time.sleep(1800)
  • Вопрос задан
  • 336 просмотров
Подписаться Простой 2 комментария
Решения вопроса 2
Во первых вместо time.sleep используйте schedule, по скольку ваше выполнение через неделю может сожрать гиг памяти. Во вторых, а не проще просто создать переменную и в том случае если она = False просто не выполнять цикл. Можно сделать программу асинхронной, что бы она не завершилась, после указания нечего не делать, и ждала следующих указаний. А и добавь логи с декоратором который будет ловить ошибки, а интервал бери с конфиг файла, который тебе нужно создать. Подозреваю что там очень плохая структура проекта ( не удивлюсь если ты писал всё в одном файле ) Если хочешь, то создай git репу и пул реквест, я сделаю заметки.
Ответ написан
Комментировать
solotony
@solotony
покоряю пик Балмера
распараллеливай задачу, один поток выполняет работу (если есть флаг) другой поток контролирует флаг

хотя 30 минут ? может тебе по крону ее исполнять ?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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