Python میں ٹیلیگرام بوٹ کا استعمال کرتے ہوئے لینکس سرور تک رسائی

اکثر ایسے حالات ہوتے ہیں جب سرور تک رسائی یہاں اور ابھی کی ضرورت ہوتی ہے۔ تاہم، SSH کے ذریعے جڑنا ہمیشہ سب سے آسان طریقہ نہیں ہوتا ہے، کیونکہ ہو سکتا ہے آپ کے پاس SSH کلائنٹ، سرور کا پتہ یا صارف/پاس ورڈ کا مجموعہ نہ ہو۔ یقینا ہے Webmin، جو انتظامیہ کو آسان بناتا ہے، لیکن یہ فوری رسائی بھی فراہم نہیں کرتا ہے۔

لہذا میں نے ایک آسان لیکن دلچسپ حل کو نافذ کرنے کا فیصلہ کیا۔ یعنی، ایک ٹیلیگرام بوٹ لکھیں جو، سرور پر ہی لانچ ہونے پر، اس پر بھیجے گئے حکموں پر عمل کرے گا اور نتیجہ واپس کرے گا۔ تعلیم حاصل کر کے کچھ مضامین اس موضوع پر، میں نے محسوس کیا کہ ابھی تک کسی نے بھی اس طرح کے نفاذ کو بیان نہیں کیا ہے۔

میں نے اس پروجیکٹ کو Ubuntu 16.04 پر لاگو کیا، لیکن دیگر تقسیموں پر پریشانی سے پاک لانچ کے لیے میں نے سب کچھ عمومی انداز میں کرنے کی کوشش کی۔

بوٹ رجسٹریشن

@BotFather کے ساتھ ایک نیا بوٹ رجسٹر کرنا۔ ہم اسے اس کے پاس بھیجتے ہیں۔ /newbot اور مزید متن میں۔ ہمیں نئے بوٹ اور آپ کی شناخت کے لیے ایک ٹوکن کی ضرورت ہوگی (آپ اسے حاصل کر سکتے ہیں، مثال کے طور پر، سے @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 قدر سے بدل دیتے ہیں۔ صارف کی شناخت کی تصدیق ضروری ہے تاکہ بوٹ صرف آپ کو آپ کے سرور تک رسائی فراہم کرے۔ فنکشن check_output() پاس کردہ کمانڈ پر عمل کرتا ہے اور نتیجہ واپس کرتا ہے۔

جو کچھ باقی ہے وہ بوٹ کو لانچ کرنا ہے۔ سرور پر عمل کو چلانے کے لیے میں استعمال کرنا پسند کرتا ہوں۔ screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(جہاں "ServerBot" عمل کی شناخت ہے)

عمل خود بخود پس منظر میں شروع ہو جائے گا۔ آئیے بوٹ کے ساتھ بات چیت کرتے ہیں اور چیک کرتے ہیں کہ سب کچھ اسی طرح کام کر رہا ہے جیسا کہ اسے کرنا چاہیے:

Python میں ٹیلیگرام بوٹ کا استعمال کرتے ہوئے لینکس سرور تک رسائی

مبارک ہو! بوٹ اس کو بھیجے گئے حکموں پر عمل کرتا ہے۔ اب، سرور تک رسائی حاصل کرنے کے لیے، آپ کو صرف بوٹ کے ساتھ ڈائیلاگ کھولنے کی ضرورت ہے۔

احکامات کو دہرانا

اکثر، سرور کی حالت کو مانیٹر کرنے کے لیے، آپ کو وہی کمانڈز چلانے پڑتے ہیں۔ لہٰذا، حکموں کو دوبارہ بھیجے بغیر دہرانے کا نفاذ بہت مناسب ہوگا۔

ہم اسے پیغامات کے نیچے ان لائن بٹنوں کا استعمال کرتے ہوئے نافذ کریں گے:

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

آئیے دوبارہ چیک کریں کہ سب کچھ صحیح طریقے سے کام کر رہا ہے:

Python میں ٹیلیگرام بوٹ کا استعمال کرتے ہوئے لینکس سرور تک رسائی

جب آپ پیغام کے نیچے بٹن پر کلک کرتے ہیں، تو بوٹ کو اس کمانڈ کو دہرانا چاہیے جس سے پیغام بھیجا گیا تھا۔

اس کے بجائے کسی نتیجے کے

بلاشبہ، یہ طریقہ کلاسیکی کنکشن کے طریقوں کے متبادل ہونے کا بہانہ نہیں کرتا، تاہم، یہ آپ کو سرور کی حالت کے بارے میں فوری طور پر معلوم کرنے اور اسے ایسے کمانڈ بھیجنے کی اجازت دیتا ہے جن کے لیے پیچیدہ آؤٹ پٹ کی ضرورت نہیں ہوتی ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں