Задать вопрос
vera_ira
@vera_ira
Делаю приложение по изучению Иврит (Python Kotlin)

Почему не работает телеграмм бот при использовании schedule?

Помогите понять в чем проблема? Для отправки сообщений по расписанию хочу использовать модуль schedule. Код выглядит примерно так, как указано ниже. При таком запуске отправка по расписанию работает, а вот сами хендлеры перестают работать. Например @bot.message_handler(commands=['info']) не отвечает. Что в коде нужно изменить? Предполагаю, что нужно изменить эту часть:

while True:
    schedule.run_pending()
    time.sleep(1)


Но на что изменить?

import schedule
import time

def job():
    print("I'm working...")

schedule.every(1).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

@bot.message_handler(commands=['info'])
def handle_text(message):
    answer = 'БЛА-БЛА-БЛА.'
    bot.send_message(message.chat.id, answer)

if __name__ == '__main__':
    bot.polling(none_stop=True, interval=0)
  • Вопрос задан
  • 1749 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 2
vera_ira
@vera_ira Автор вопроса
Делаю приложение по изучению Иврит (Python Kotlin)
Вот такой вариант заработал. Многопоточность и модуль threading помогли.

import schedule
import time
import threading

def job():
    print("I'm working...")

schedule.every(1).minutes.do(job)

def go():
    while 1:
        schedule.run_pending()
        time.sleep(1)

t = threading.Thread(target=go, name="тест")
t.start()

@bot.message_handler(commands=['info'])
def handle_text(message):
    answer = 'БЛА-БЛА-БЛА.'
    bot.send_message(message.chat.id, answer)

if __name__ == '__main__':
    bot.polling(none_stop=True, interval=0)
Ответ написан
Комментировать
У вас синхронный однопоточный код. Ваш код никогда даже не достигает запуска поллинг, крутясь в бесконечном while. Думаю, простейшим вариантом будет попробовать вынести выполнение bot.polling до вашего бесконечного цикла, а точнее унести сам цикл и инициализации шедулера после bot.polling
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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