Pir caran rewş hene ku gava gihîştina serverê li vir û nuha hewce ye. Lêbelê, girêdana bi SSH-ê her gav ne rêbaza herî hêsan e, ji ber ku dibe ku di destê we de xerîdarek SSH, navnîşana serverê an kombînasyona bikarhêner / şîfreya we tune be. Bê guman heye
Ji ber vê yekê min biryar da ku çareseriyek hêsan lê balkêş bicîh bikim. Ango, botek Telegram binivîsin ku, gava ku li ser serverê bixwe were destpêkirin, dê fermanên ku jê re hatine şandin bicîh bîne û encamê vegerîne. Xwendiye
Min ev proje li ser Ubuntu 16.04 bicîh kir, lê ji bo destpêkirina bê pirsgirêk li ser belavkirinên din min hewl da ku her tiştî bi rengek gelemperî bikim.
Tomarkirina botê
Tomarkirina botek nû bi @BotFather re. Em jê re dişînin /newbot
û bêtir di nivîsê de. Em ê ji bo bota nû û nasnameya we nîşanek hewce ne (hûn dikarin wê, mînakî, ji
Amadekirina Python
Ji bo destpêkirina botê em ê pirtûkxaneyê bikar bînin telebot
(pip install pytelegrambotapi
). Bikaranîna pirtûkxaneyê subprocess
Em ê fermanan li ser serverê bicîh bikin.
Botekê dimeşîne
Li ser serverê em pelê bot.py diafirînin:
nano bot.py
Û kodê têxin nav wê:
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)#в случае падения
Em nîşana botê ya tê de bi ya ku ji hêla @BotFather ve hatî derxistin, û bikarhêner_id bi nirxa nasnameya hesabê we veguherînin. Verastkirina nasnameya bikarhêner hewce ye da ku bot gihîştina servera we tenê ji we re peyda bike. Karkirin check_output()
fermana derbasbûyî pêk tîne û encamê vedigerîne.
Tiştê ku dimîne destpêkirina botê ye. Ji bo meşandina pêvajoyên li ser serverê ez tercîh dikim ku bikar bînim screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(ku "ServerBot" nasnameya pêvajoyê ye)
Pêvajo dê bixweber di paşnavê de dest pê bike. Ka em bi botê re bikevin diyalogê û kontrol bikin ka her tişt wekî ku divê dixebite:
Pîroz be! Bot fermanên ku jê re hatine şandin pêk tîne. Naha, ji bo gihîştina serverê, hûn tenê hewce ne ku bi botê re diyalogek vekin.
Dubarekirina fermanan
Bi gelemperî, ji bo şopandina rewşa serverê, divê hûn heman fermanan bimeşînin. Ji ber vê yekê, pêkanîna fermanên dubare bêyî şandina wan ji nû ve dê pir guncan be.
Em ê wê bi karanîna bişkokên hundurîn ên di binê peyaman de bicîh bikin:
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)#в случае падения
Botê ji nû ve bidin destpêkirin:
killall python3
screen -dmS ServerBot python3 bot.py
Ka em dîsa kontrol bikin ku her tişt rast dixebite:
Dema ku hûn bişkoja li binê peyamê bikirtînin, divê bot emrê ku jê re peyam hatî şandin dubare bike.
Şûna encamê
Bê guman, ev rêbaz nahêle ku bibe şûna rêbazên girêdana klasîk, di heman demê de, ew dihêle hûn zû li ser rewşa serverê fêr bibin û fermanên ku ne hewceyî derketina tevlihev jê re bişînin.
Source: www.habr.com