پٿون ۾ ٽيليگرام بوٽ استعمال ڪندي لينڪس سرور تائين رسائي

اڪثر ڪري حالتون آهن جڏهن سرور تائين رسائي جي ضرورت آهي هتي ۽ هاڻي. جڏهن ته، SSH ذريعي ڳنڍڻ هميشه سڀ کان وڌيڪ آسان طريقو ناهي، ڇو ته توهان وٽ شايد SSH ڪلائنٽ، سرور ايڊريس، يا صارف/پاسورڊ ميلاپ هٿ ۾ نه هجي. يقيناً آهي ويب تي، جيڪو انتظاميه کي آسان بڻائي ٿو، پر اهو پڻ فوري رسائي فراهم نٿو ڪري.

تنهن ڪري مون هڪ سادي پر دلچسپ حل لاڳو ڪرڻ جو فيصلو ڪيو. يعني، هڪ ٽيليگرام بوٽ لکڻ لاءِ جيڪو، جڏهن سرور تي ئي لانچ ڪيو ويندو، ان تي موڪليل حڪمن تي عمل ڪندو ۽ نتيجو واپس ڪندو. تعليم حاصل ڪرڻ ڪيترن مضمون هن موضوع تي، مون محسوس ڪيو ته اڃا تائين ڪنهن به اهڙي عمل کي بيان نه ڪيو آهي.

مون هن پروجيڪٽ کي 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)#в случае падения

اسان ان ۾ bot ٽوڪن کي تبديل ڪريون ٿا @BotFather پاران جاري ڪيل هڪ سان، ۽ user_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

تبصرو شامل ڪريو