Всем привет, написал простого бота для управления локальными компами, хотелось бы узнать мнение авторитетных экспертов, так как я сам только вникаю в это дело. Как можно оптимизировать его код, буду очень признателен.
class SSHWrapper(object):
def __init__(self, user='user', psw='pass1234', port=22):
self.user = user
self.psw = psw
self.port = port
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#statusIP
def get_status(self, host, user=None, psw=None, port=None):
self.ssh.connect(
hostname=host,
port=port or self.port,
username=user or self.user,
password=psw or self.psw
)
# Выполнение команды
stdin, stdout, stderr = self.ssh.exec_command("uptime -p")
# Читаем результат:
result = stdout.read() + stderr.read()
self.ssh.close()
return result
#rebootIP
def get_reboot(self, host, user=None, psw=None, port=None):
self.ssh.connect(
hostname=host,
port=port or self.port,
username=user or self.user,
password=psw or self.psw
)
# Выполнение команды
stdin, stdout, stderr = self.ssh.exec_command("sudo reboot now")
# Читаем результат:
result = stdout.read() + stderr.read()
self.ssh.close()
return result
#downIP
def get_down(self, host, user=None, psw=None, port=None):
self.ssh.connect(
hostname=host,
port=port or self.port,
username=user or self.user,
password=psw or self.psw
)
# Выполнение команды
stdin, stdout, stderr = self.ssh.exec_command("sudo -S shutdown -h now")
stdin.write('pass1234')
stdin.flush()
# Читаем результат:
result = stdout.read() + stderr.read()
self.ssh.close()
return result
ssh = SSHWrapper()
#HELPCOMMAND
help_string = []
help_string.append("*Вот что я умею на данный момент:*\n\n")
help_string.append("/start - Выводит приветствие\n")
help_string.append("/help - Отображает справку\n")
help_string.append("/status IP - Состояние работы компа\n")
help_string.append("/reboot IP - Перезагрузка компа\n")
help_string.append("/down IP - Выключение компа\n")
#START
@bot.message_handler(commands=['start'])
def send_start(message):
# отправка простого сообщения
bot.send_message(message.chat.id, "*Приветствую, {name}!*".format(name=message.chat.first_name), parse_mode="Markdown")
#HELP
@bot.message_handler(commands=['help'])
def send_help(message):
# отправка сообщения с поддержкой разметки Markdown
bot.send_message(message.chat.id, "".join(help_string), parse_mode="Markdown")
def listener(messages):
#STATUSIP
@bot.message_handler(commands=['status'])
def handle_status_request(message):
# получение из чата IP сервака
ip = message.text.split()[-1]
thrue_ip = re.findall(r'[1][9][2].[1][6][8].\d{1,3}\.\d{1,3}', ip)
if ip in thrue_ip:
# проверка его на доступность
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)
else:
bot.send_message(message.chat.id, "*Команда НЕ распознана.*\nВероятнее всего НЕ указан (указан неправильно) IP адрес нужного тебе компа.", parse_mode="Markdown")
#REBOOTIP
@bot.message_handler(commands=['reboot'])
def handle_reboot_request(message):
# получение из чата IP сервака
ip = message.text.split()[-1]
thrue_ip = re.findall(r'[1][9][2].[1][6][8].\d{1,3}\.\d{1,3}', ip)
if ip in thrue_ip:
# проверка его на доступность
r = pyping.ping(ip)
if r.ret_code == 0:
result = ssh.get_reboot(ip)
# проверка его на доступность после ребута
r = pyping.ping(ip)
if r.ret_code == 0:
result = ("Комп был перезагружен.")
bot.send_message(message.chat.id, result)
else:
result = ("Комп недоступен.")
bot.send_message(message.chat.id, result)
else:
bot.send_message(message.chat.id, "*Команда НЕ распознана.*\nВероятнее всего НЕ указан (указан неправильно) IP адрес нужного тебе компа.", parse_mode="Markdown")
#DOWNIP
@bot.message_handler(commands=['down'])
def handle_down_request(message):
# получение из чата IP сервака
ip = message.text.split()[-1]
thrue_ip = re.findall(r'[1][9][2].[1][6][8].\d{1,3}\.\d{1,3}', ip)
if ip in thrue_ip:
# проверка его на доступность
r = pyping.ping(ip)
if r.ret_code == 0:
result = ssh.get_down(ip)
# проверка его на доступность после выключения
r = pyping.ping(ip)
if r.ret_code == 0:
result = ("Комп был выключен.")
bot.send_message(message.chat.id, result)
else:
result = ("Комп недоступен.")
bot.send_message(message.chat.id, result)
else:
bot.send_message(message.chat.id, "*Команда НЕ распознана.*\nВероятнее всего НЕ указан (указан неправильно) IP адрес нужного тебе компа.", parse_mode="Markdown")
bot.set_update_listener(listener)
while True:
try:
bot.polling(none_stop=True)
except Exception as err:
logging.error(err)
time.sleep(10)