Для написания кода можно использовать любой текстовый, кодовый редактор. Хоть блокнот. Главное что бы расширение файла было .py.
Перед тем как писать код, надо определиться какие цели мне нужно достичь. В моем случае я имею 4 ПВЗ с белыми айпи адресами. У меня открыт 554 порт, который я должен проверять. То есть я хочу проверять каждый адрес по очереди раз в 5 минут. Если порт не отвечает, через 2 минуты повторяю попытку еще раз. Если ответа нет, мне в телеграмм приходит уведомление где указано состояние порта (Отвечает или Недоступен), айпи и порт, адрес пункта выдачи. Так же я хочу добавить кнопку "Проверка доступа", что бы получить состояние всех пунктов списком. Снизу приведу готовый код.
"import telebot
import socket
import threading
import time
# Телеграм токен вашего бота
TOKEN = 'Здесь указываете ваш токен'
bot = telebot.TeleBot(TOKEN)
# Данные для проверки адресов. Пишите свои адреса и названия
addresses = [
{'ip': '192.168.1.127', 'port': 554, 'name': 'Москва'},
{'ip': '192.168.1.128', 'port': 554, 'name': 'Казань'},
{'ip': '192.168.1.129, 'port': 554, 'name': 'Киров'},
{'ip': '192.168.1.126', 'port': 554, 'name': 'Краснодар'}
]
check_interval = 300 # Интервал в секундах между проверками (5 минут)
retry_interval = 120 # Интервал повторной проверки в секундах (2 минуты)
checking = False # Флаг для управления проверками
# Функция для проверки доступности порта
def check_port(ip, port):
try:
with socket.create_connection((ip, port), timeout=5):
return True
except (socket.timeout, socket.error):
return False
# Фоновая задача для постоянной проверки
def periodic_check(chat_id):
global checking
while checking:
for address in addresses:
ip, port, name = address['ip'], address['port'], address['name']
if not check_port(ip, port):
time.sleep(retry_interval)
if not check_port(ip, port):
bot.send_message(chat_id, f"🔴 {name} ({ip}:{port}) - Не отвечает")
time.sleep(check_interval)
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def start(message):
global checking
if not checking:
checking = True
bot.send_message(message.chat.id, "✅ Бот запущен. Начинаем проверки.")
threading.Thread(target=periodic_check, args=(message.chat.id,), daemon=True).start()
else:
bot.send_message(message.chat.id, "ℹ️ Бот уже работает.")
# Обработчик команды /stop
@bot.message_handler(commands=['stop'])
def stop(message):
global checking
if checking:
checking = False
bot.send_message(message.chat.id, "⏹️ Проверки остановлены.")
else:
bot.send_message(message.chat.id, "ℹ️ Бот уже остановлен.")
# Обработчик кнопки "Проверка доступа"
@bot.message_handler(func=lambda message: message.text == "Проверка доступа")
def manual_check(message):
results = []
for address in addresses:
ip, port, name = address['ip'], address['port'], address['name']
status = "🟢 Доступен" if check_port(ip, port) else "🔴 Не отвечает"
results.append(f"{status} - {name} ({ip}:{port})")
bot.send_message(message.chat.id, "\n".join(results))
# Добавление кнопки "Проверка доступа"
@bot.message_handler(commands=['menu'])
def show_menu(message):
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add(telebot.types.KeyboardButton("Проверка доступа"))
bot.send_message(message.chat.id, "📋 Выберите действие:", reply_markup=markup)
# Запуск бота
bot.polling(none_stop=True)"
Не забудьте вставить свой токен и вписать свои айпи адреса. Сохраняем файл с названием bot.py например на рабочем столе. Если все сделали правильно, то должно выглядеть примерно так: