diff --git a/.env b/.env new file mode 100644 index 0000000..ae369f7 --- /dev/null +++ b/.env @@ -0,0 +1,6 @@ +TG_TOKEN = 'YOUR:TOKEN' +TG_CHAT_ID = 'YOUR:CHAT_ID' +DOMAIN = 'YOUR_DOMAIN' +PORT = 80 +TG_FMESSAGE = 'Сервер {0}:{1} недоступен' +REQUEST_TIMEOUT = 600 \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..fcf6600 --- /dev/null +++ b/main.py @@ -0,0 +1,39 @@ +from dotenv import load_dotenv +import os +import socket +import time +import telebot + +load_dotenv() + +TOKEN = os.getenv('TG_TOKEN') +CHAT_ID = os.getenv('TG_CHAT_ID') +DOMAIN = os.getenv('DOMAIN') +PORT = int(os.getenv('PORT', 80)) +FMESSAGE = os.getenv('TG_FMESSAGE') +REQUEST_TIMEOUT = int(os.getenv('TIMEOUT', 60)) # Время таймаута опроса в секундах + +last_status = True # Последнее состояние + +bot = telebot.TeleBot(TOKEN) + +def check_server(domain, port): + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Создадим сокет + sock.settimeout(10) # Время ожидания подключения + result = sock.connect_ex((domain, port)) # 0 - успех + sock.close() # Закрываем соединение + return result == 0 + except: + return False + + +while True: + # Если статус изменился + if last_status != check_server(DOMAIN, PORT): + last_status = not last_status # Меняем последний статус на обратный + if not last_status: # Если недоступен, то шлем сообщение + bot.send_message(chat_id=CHAT_ID, text=FMESSAGE.format(DOMAIN, PORT)) + + time.sleep(REQUEST_TIMEOUT) # Засыпаем +