په پایتون کې د ټیلیګرام بوټ په کارولو سره لینکس سرور ته لاسرسی

ډیری وختونه داسې شرایط شتون لري کله چې سرور ته لاسرسی دلته او اوس اړین وي. په هرصورت، د SSH له لارې نښلول تل ترټولو اسانه لاره نه ده، ځکه چې تاسو ممکن د SSH مراجع، سرور پته، یا د کاروونکي / پاسورډ ترکیب په لاس کې ونلرئ. البته لري ویبینټ، کوم چې اداره ساده کوي ، مګر دا سمدستي لاسرسی هم نه ورکوي.

نو ما پریکړه وکړه چې یو ساده مګر په زړه پورې حل پلي کړم. د مثال په توګه ، د ټیلیګرام بوټ لیکلو لپاره چې ، کله چې پخپله سرور کې پیل شي ، هغه ته لیږل شوي حکمونه به اجرا کړي او پایله به یې بیرته راولي. مطالعه کړې څو مقالې د دې موضوع په اړه، ما پوهیده چې تر اوسه هیڅوک د دې ډول پلي کولو بیان نه دی کړی.

ما دا پروژه په اوبنټو 16.04 کې پلي کړې ، مګر په نورو توزیعاتو کې د ستونزو څخه پاک چلولو لپاره ، ما هڅه وکړه چې هرڅه په عمومي ډول جوړ کړم.

د بوټ ثبتول

د @BotFather سره نوی بوټ راجستر کړئ. موږ هغه لیږو /newbot او نور په متن کې. موږ به د بوټو نوي نښه او ستاسو ID ته اړتیا ولرو (تاسو کولی شئ دا ترلاسه کړئ، د بیلګې په توګه، له @userinfobot).

د پیتون چمتو کول

د بوټ چلولو لپاره، موږ به کتابتون وکاروو telebot (pip install pytelegrambotapi). د کتابتون کارول subprocess موږ به په سرور کې حکمونه اجرا کړو.

بوټ لانچ

په سرور کې د bot.py فایل جوړ کړئ:
nano bot.py

او په دې کې کوډ پیسټ کړئ:

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)#в случае падения

موږ په دې کې د بوټ نښه د @BotFather لخوا صادر شوي سره بدلوو، او user_id ستاسو د حساب ID ارزښت سره. د کارونکي id چک کول اړین دي ترڅو بوټ یوازې تاسو ته ستاسو سرور ته لاسرسی چمتو کړي. فعالیت check_output() ورکړل شوی کمانډ اجرا کوي او پایله بیرته راوړي.

دا یوازې د بوټ پیل کولو لپاره پاتې دی. په سرور کې د پروسو چلولو لپاره، زه غوره کوم چې وکاروم screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(چیرته چې "ServerBot" د پروسې ID دی)

پروسه به په اتوماتيک ډول په شاليد کې پرمخ ځي. راځئ چې د بوټ سره خبرو اترو ته لاړ شو او وګورئ چې هرڅه کار کوي لکه څنګه چې باید وي:

په پایتون کې د ټیلیګرام بوټ په کارولو سره لینکس سرور ته لاسرسی

مبارک شه! بوټ هغه امرونه اجرا کوي چې ورته لیږل شوي. اوس، سرور ته د لاسرسي لپاره، تاسو یوازې د بوټ سره د خبرو اترو پرانیستلو ته اړتیا لرئ.

د امر تکرار

ډیری وختونه، د سرور حالت څارلو لپاره، تاسو باید ورته حکمونه اجرا کړئ. له همدې امله ، د بیا لیږلو پرته د تکرار امرونو پلي کول به خورا لرې وي.

موږ به دا د پیغامونو لاندې د انلاین بټونو په کارولو سره پلي کړو:

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)#в случае падения

د بوټ بیا پیل کول:

killall python3
screen -dmS ServerBot python3 bot.py

راځئ چې بیا وګورو چې هرڅه سم کار کوي:

په پایتون کې د ټیلیګرام بوټ په کارولو سره لینکس سرور ته لاسرسی

د پیغام لاندې د تڼۍ په فشارولو سره، بوټ باید هغه کمانډ تکرار کړي چې له هغې څخه دا پیغام لیږل شوی.

پر ځای د يو پایلې

البته، دا طریقه د کلاسیک پیوستون میتودونو لپاره بدیل نه بولي، په هرصورت، دا تاسو ته اجازه درکوي په چټکۍ سره د سرور حالت په اړه ومومئ او ورته امرونه واستوئ چې پیچلي محصول ته اړتیا نلري.

سرچینه: www.habr.com

Add a comment