Здравствуйте!
У меня есть бот, который проверяет работоспособность некого сайта через фиксированный отрезок времени (например каждые пол часа). Для этой задачи в интернете нашел пакет schedule, сама работа с Telegram api ведется через pyTelegramBotAPI. Я столкнулся со следующей проблемой: если работает планировщик, то не работает bot.polling и наоборот, подскажите пожалуйста как их синхронизировать.
п.с. вот так бот получает ответ api, но schedule не работает
def main_loop():
bot.polling(True)
while 1:
schedule.run_pending()
time.sleep(1)
if __name__ == '__main__':
main_loop()
вот весь скрипт:
import telebot
from config import ACCESS_TOKEN
import config
from telebot.types import Message
import requests
import schedule
import time
import sys
bot = telebot.TeleBot(ACCESS_TOKEN)
chat_id = '434574930'
# @bot.message_handler(func=lambda message: True)
def send_message():
req_home = requests.get(config.HOME_URL, auth=(config.LOGIN, config.PASS))
req_ocr = requests.get(config.OCR_URL, auth=(config.LOGIN, config.PASS))
response = ''
# если ответ сервера не 200
# пока отлаживаю, ожидаю 200
if req_home.status_code == 200:
response = config.HOME_URL + " status code: " + str(req_home.status_code) + '\n'
# если ответ сервера не 200
if req_ocr.status_code == 200:
response = response + config.OCR_URL + " status code: " + str(req_ocr.status_code) + '\n'
# если сервер вернул ошибку
if response != '':
bot.send_message(chat_id, response)
# Планировщик для бота
schedule.every(config.SCHEDULE_DELAY).seconds.do(send_message)
@bot.message_handler(commands=['start'])
def set_chat_id(message: Message):
global chat_id
chat_id = message.chat.id
bot.reply_to(message, "Start checking ...")
def main_loop():
bot.polling(True)
while 1:
schedule.run_pending()
time.sleep(1)
if __name__ == '__main__':
main_loop()