/status <ip>
:...
def handle_status(msg):
server_ip = msg.text.split()[1]
def get_status(host, ...):
<общение с сервером>
...
# Вариант 1
# Используете команды вида /status 1.1.1.1
def send_start(msg):
# получаем адрес сервера
host = msg.text.split()[1]
# Общаемся
result = get_status(host)
# Отправляем ответ
send_m(uid, result)
# Вариант 2
# Команды вида /status1.1.1.1
# ctrl + c, ctrl + v
/status <host>
, чтобы получить результат. /execute host command_to_execute
, которая будет выполнять command_to_execute на сервере с адресом ip. def listener(messages):
@bot.message_handler(commands=['status'])
def handle_status_request(message):
# получение из чата IP сервака
ip = message.text.split()[-1]
# проверка его на доступность
r = pyping.ping(ip)
if r.ret_code == 0:
result = ssh.get_status(ip)
bot.send_message(message.chat.id, result)
else:
result = ("Указанный сервер недоступен")
bot.send_message(message.chat.id, result)
# получение из чата IP сервака
ip_valid = re.compile(r'[1][9][2].[1][6][8].')
ip = message.text.split()[-1]
if ip not in ip_valid:
ip_pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
...
def sample_f(msg):
ip = msg.text.split()[-1]
if ip_pat.match(ip) is not None:
do_something()
if ip in valid_ip
проверяет вхождение ip
в списке найденных адресов. Это довольно глупо выглядит. Либо итерируйтесь по возвращаемой коллекции, либо используйте методы для поиска единичного вхождения.192.168
: 192\.168\.\d{1,3}\.\d{1,3}. Для тестирования регулярных выражение удобно использовать regex101.ip = message.text.split()[-1]
valid_ip = re.match(r'192\.168\.\d{1,3}\.\d{1,3}', ip)
if valid_ip is not None:
valid_ip = valid_ip.group()
...