اکثر ایسے حالات ہوتے ہیں جب سرور تک رسائی یہاں اور ابھی کی ضرورت ہوتی ہے۔ تاہم، SSH کے ذریعے جڑنا ہمیشہ سب سے آسان طریقہ نہیں ہوتا ہے، کیونکہ ہو سکتا ہے آپ کے پاس SSH کلائنٹ، سرور کا پتہ یا صارف/پاس ورڈ کا مجموعہ نہ ہو۔ یقینا ہے
لہذا میں نے ایک آسان لیکن دلچسپ حل کو نافذ کرنے کا فیصلہ کیا۔ یعنی، ایک ٹیلیگرام بوٹ لکھیں جو، سرور پر ہی لانچ ہونے پر، اس پر بھیجے گئے حکموں پر عمل کرے گا اور نتیجہ واپس کرے گا۔ تعلیم حاصل کر کے
میں نے اس پروجیکٹ کو Ubuntu 16.04 پر لاگو کیا، لیکن دیگر تقسیموں پر پریشانی سے پاک لانچ کے لیے میں نے سب کچھ عمومی انداز میں کرنے کی کوشش کی۔
بوٹ رجسٹریشن
@BotFather کے ساتھ ایک نیا بوٹ رجسٹر کرنا۔ ہم اسے اس کے پاس بھیجتے ہیں۔ /newbot
اور مزید متن میں۔ ہمیں نئے بوٹ اور آپ کی شناخت کے لیے ایک ٹوکن کی ضرورت ہوگی (آپ اسے حاصل کر سکتے ہیں، مثال کے طور پر، سے
ازگر کی تیاری
بوٹ کو لانچ کرنے کے لیے ہم لائبریری کا استعمال کریں گے۔ 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" عمل کی شناخت ہے)
عمل خود بخود پس منظر میں شروع ہو جائے گا۔ آئیے بوٹ کے ساتھ بات چیت کرتے ہیں اور چیک کرتے ہیں کہ سب کچھ اسی طرح کام کر رہا ہے جیسا کہ اسے کرنا چاہیے:
مبارک ہو! بوٹ اس کو بھیجے گئے حکموں پر عمل کرتا ہے۔ اب، سرور تک رسائی حاصل کرنے کے لیے، آپ کو صرف بوٹ کے ساتھ ڈائیلاگ کھولنے کی ضرورت ہے۔
احکامات کو دہرانا
اکثر، سرور کی حالت کو مانیٹر کرنے کے لیے، آپ کو وہی کمانڈز چلانے پڑتے ہیں۔ لہٰذا، حکموں کو دوبارہ بھیجے بغیر دہرانے کا نفاذ بہت مناسب ہوگا۔
ہم اسے پیغامات کے نیچے ان لائن بٹنوں کا استعمال کرتے ہوئے نافذ کریں گے:
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