Helitaanka server-ka Linux iyadoo la isticmaalayo Telegram bot gudaha Python

Inta badan waxaa jira xaalado marka gelitaanka server-ka looga baahan yahay halkan iyo hadda. Si kastaba ha ahaatee, ku xidhidhiyaha SSH had iyo jeer maaha habka ugu haboon, sababtoo ah waxaa laga yaabaa inaadan haysan macmiilka SSH, ciwaanka serverka, ama isticmaalaha/password isku darka gacanta. Dabcan leeyihiin Webmin, taas oo fududaynaysa maamulka, laakiin sidoo kale ma bixiso helitaanka degdeg ah.

Markaa waxaan go'aansaday inaan hirgeliyo xal fudud laakiin xiiso leh. Yacni, si aad u qorto bot-ka Telegram-ka kaas oo, marka lagu soo saaro server-ka laftiisa, uu fulin doono amarrada loo soo diray oo soo celin doona natiijada. Isagoo bartay dhowr ah maqaalada Mawduucan, waxaan gartay in aysan jirin cid weli ku tilmaamtay fulinta noocaan ah.

Waxaan mashruucan ka hirgaliyay Ubuntu 16.04, laakiin si dhib la'aan ah oo ku socota qaybinta kale, waxaan isku dayay inaan wax walba u sameeyo si guud.

Diiwaangelinta bot

Iska diiwaan geli bot cusub @BotFather. Waanu u dirnay /newbot iyo in dheeraad ah in qoraalka. Waxaan u baahan doonaa bot token cusub iyo id kaaga (waxaad ka heli kartaa, tusaale ahaan, ka @userinfobot).

Diyaarinta Python

Si loo socodsiiyo bot-ka, waxaan isticmaali doonaa maktabadda telebot (pip install pytelegrambotapi). Isticmaalka Maktabadda subprocess waxaan ku fulin doonaa amarrada server-ka.

Bot bilaabista

Ku samee faylka bot.py serverka:
nano bot.py

Oo ku dheji koodka:

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

Waxaan ku bedelnaa bot token ku dhex jira kan uu soo saaray @BotFather, iyo user_id qiimaha id ee akoonkaaga. Hubinta aqoonsiga isticmaalaha ayaa loo baahan yahay si bot-ku u siiyo gelitaanka server-kaaga oo keliya adiga. Shaqada check_output() fulinta amarka la siiyay oo soo celisa natiijada.

Waxa hadhay oo kaliya in la bilaabo bot-ka. Nidaamyada socodsiinta ee server-ka, waxaan doorbidayaa inaan isticmaalo screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(halka "ServerBot" uu yahay aqoonsiga habka)

Nidaamku wuxuu si toos ah u socon doonaa gadaasha. Aan tagno wada hadalka bot oo aan hubinno in wax walba ay u shaqeeyaan sidii ay ahayd:

Helitaanka server-ka Linux iyadoo la isticmaalayo Telegram bot gudaha Python

Hambalyo! Botku wuxuu fuliyaa amarrada loo soo diray. Hadda, si aad u gasho server-ka, kaliya waxaad u baahan tahay inaad wadahadal la furto bot-ka.

Ku celcelinta amarka

Inta badan, si loola socdo xaaladda server-ka, waa inaad fulisaa amarro isku mid ah. Sidaa darteed, hirgelinta amarrada soo noqnoqda iyada oo aan dib loo soo celin waxay noqon doontaa meel aad u xun.

Waxaan ku hirgelin doonaa annagoo adeegsanayna badhamada gudaha ee fariimaha hoostooda:

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

Dib u bilaabida bot:

killall python3
screen -dmS ServerBot python3 bot.py

Aan mar kale hubinno in wax walba ay si sax ah u shaqeeyaan:

Helitaanka server-ka Linux iyadoo la isticmaalayo Telegram bot gudaha Python

Adigoo riixaya badhanka hoosta fariinta, botku waa inuu ku celiyaa amarka fariintan laga soo diray.

Halkii gabagabo

Dabcan, habkani ma iska dhigayo inuu yahay beddelka hababka isku xirka caadiga ah, si kastaba ha ahaatee, waxay kuu ogolaaneysaa inaad si dhakhso ah u ogaato xaaladda server-ka oo aad u dirto amarro aan u baahnayn wax soo saar adag.

Source: www.habr.com

Add a comment