Gihîştina servera linux bi karanîna botê Telegram-ê di Python de

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 Webmin, ku rêveberiyê hêsan dike, lê ew jî gihîştina tavilê peyda nake.

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 çend gotarên Di vê mijarê de, min fêm kir ku heta niha kesî pêkanînên wiha negotiye.

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 @userinfobot).

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:

Gihîştina servera linux bi karanîna botê Telegram-ê di Python de

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:

Gihîştina servera linux bi karanîna botê Telegram-ê di Python de

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

Add a comment