Spiss ikun hemm sitwazzjonijiet meta l-aċċess għas-server huwa meħtieġ hawn u issa. Madankollu, il-konnessjoni permezz ta' SSH mhux dejjem hija l-aktar mod konvenjenti, għaliex jista' jkun li ma jkollokx klijent SSH, indirizz tas-server, jew kombinazzjoni ta' utent/password f'idejna. Naturalment għandhom
Għalhekk iddeċidejt li nimplimenta soluzzjoni sempliċi iżda interessanti. Jiġifieri, biex tikteb Telegram bot li, meta jitnieda fuq is-server innifsu, jesegwixxi l-kmandi mibgħuta lilu u jirritorna r-riżultat. Wara li studja
Implimentajt dan il-proġett fuq Ubuntu 16.04, iżda għal tmexxija mingħajr problemi fuq distribuzzjonijiet oħra, ippruvajt nagħmel kollox b'mod ġenerali.
Reġistrazzjoni tal-bot
Irreġistra bot ġdid ma' @BotFather. Nibagħtuh /newbot
u aktar fit-test. Ikollna bżonn token tal-bot ġdid u l-id tiegħek (tista’ tiksibha, pereżempju, minn
Preparazzjoni tal-python
Biex tħaddem il-bot, se nużaw il-librerija telebot
(pip install pytelegrambotapi
). Uża l-librerija subprocess
aħna se tesegwixxi kmandi fuq is-server.
Tnedija tal-bot
Oħloq fajl bot.py fuq is-server:
nano bot.py
U waħħal il-kodiċi fih:
from subprocess import check_output
import telebot
import time
bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#токен бота
user_id = 0 #id вашего аккаунта
@bot.message_handler(content_types=["text"])
def main(message):
if (user_id == message.chat.id): #проверяем, что пишет именно владелец
comand = message.text #текст сообщения
try: #если команда невыполняемая - check_output выдаст exception
bot.send_message(message.chat.id, check_output(comand, shell = True))
except:
bot.send_message(message.chat.id, "Invalid input") #если команда некорректна
if __name__ == '__main__':
while True:
try:#добавляем try для бесперебойной работы
bot.polling(none_stop=True)#запуск бота
except:
time.sleep(10)#в случае падения
Nissostitwixxu t-token tal-bot fih b'dak maħruġ minn @BotFather, u user_id bil-valur id tal-kont tiegħek. Il-verifika tal-id tal-utent hija meħtieġa sabiex il-bot jipprovdi aċċess għas-server tiegħek lilek biss. Funzjoni check_output()
jesegwixxi l-kmand mogħti u jirritorna r-riżultat.
Jibqa 'biss li jibda l-bot. Għat-tmexxija tal-proċessi fuq is-server, nippreferi nuża screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(fejn "ServerBot" hija l-ID tal-proċess)
Il-proċess se jaħdem awtomatikament fl-isfond. Ejja mmorru għad-djalogu mal-bot u ċċekkja li kollox jaħdem kif suppost:
Prosit! Il-bot jesegwixxi l-kmandi mibgħuta lilu. Issa, sabiex taċċessa s-server, għandek bżonn biss li tiftaħ djalogu mal-bot.
Ripetizzjoni tal-kmand
Ħafna drabi, biex tissorvelja l-istat tas-server, għandek tesegwixxi l-istess kmandi. Għalhekk, l-implimentazzjoni tar-repetizzjoni tal-kmandi mingħajr ma terġa 'tibgħathom se tkun ferm barra minn postu.
Aħna se nimplimentah billi tuża buttuni inline taħt il-messaġġi:
from subprocess import check_output
import telebot
from telebot import types #Добавляем импорт кнопок
import time
bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#Токен бота
user_id = 0 #id вашего аккаунта
@bot.message_handler(content_types=["text"])
def main(message):
if (user_id == message.chat.id): #проверяем, что пишет именно владелец
comand = message.text #текст сообщения
markup = types.InlineKeyboardMarkup() #создаем клавиатуру
button = types.InlineKeyboardButton(text="Повторить", callback_data=comand) #создаем кнопку
markup.add(button) #добавляем кнопку в клавиатуру
try: #если команда невыполняемая - check_output выдаст exception
bot.send_message(user_id, check_output(comand, shell = True, reply_markup = markup)) #вызываем команду и отправляем сообщение с результатом
except:
bot.send_message(user_id, "Invalid input") #если команда некорректна
@bot.callback_query_handler(func=lambda call: True)
def callback(call):
comand = call.data #считываем команду из поля кнопки data
try:#если команда не выполняемая - check_output выдаст exception
markup = types.InlineKeyboardMarkup() #создаем клавиатуру
button = types.InlineKeyboardButton(text="Повторить", callback_data=comand) #создаем кнопку и в data передаём команду
markup.add(button) #добавляем кнопку в клавиатуру
bot.send_message(user_id, check_output(comand, shell = True), reply_markup = markup) #вызываем команду и отправляем сообщение с результатом
except:
bot.send_message(user_id, "Invalid input") #если команда некорректна
if __name__ == '__main__':
while True:
try:#добавляем try для бесперебойной работы
bot.polling(none_stop=True)#запуск бота
except:
time.sleep(10)#в случае падения
Nibda mill-ġdid il-bot:
killall python3
screen -dmS ServerBot python3 bot.py
Ejja nerġgħu niċċekkjaw li kollox jaħdem sew:
Billi tagħfas il-buttuna taħt il-messaġġ, il-bot irid jirrepeti l-kmand minn fejn intbagħat dan il-messaġġ.
Minflok ma tikkonkludi
Naturalment, dan il-metodu ma jippretendix li jkun sostitut għall-metodi klassiċi ta 'konnessjoni, madankollu, jippermettilek li ssir taf malajr dwar l-istat tas-server u tibgħatlu kmandi li ma jeħtiġux output kumpless.
Sors: www.habr.com