Ukufinyelela kuseva ye-linux usebenzisa i-Telegraph bot kuPython

Imvamisa kuba nezimo lapho ukufinyelela kuseva kudingekile lapha namanje. Nokho, ukuxhuma nge-SSH akuyona njalo indlela elula kakhulu, ngoba ungase ungabi nalo iklayenti le-SSH, ikheli leseva noma inhlanganisela yomsebenzisi/yephasiwedi eduze. Yebo babe I-Webmin, okwenza ukuphatha kube lula, kodwa futhi akunikezeli ukufinyelela okusheshayo.

Ngakho nganquma ukusebenzisa isisombululo esilula kodwa esithakazelisayo. Okungukuthi, bhala i-Telegraph bot ukuthi, lapho yethulwa kuseva ngokwayo, izokhipha imiyalo ethunyelwe kuyo futhi ibuyisele umphumela. Ngemva kokufunda eziningana izihloko kulesi sihloko, ngabona ukuthi akekho owake wachaza ukuqaliswa okunjalo.

Ngisebenzise le phrojekthi ku-Ubuntu 16.04, kodwa ukwethulwa okungenazinkinga kokunye ukusatshalaliswa ngazama ukwenza yonke into ngendlela ejwayelekile.

Ukubhaliswa kwe-Bot

Ukubhalisa i-bot entsha nge-@BotFather. Sithumela kuye /newbot nokuqhubeka embhalweni. Sizodinga ithokheni ye-bot entsha kanye ne-id yakho (ungayithola, isibonelo, kusuka @userinfobot).

Ukulungiswa kwe-Python

Ukwethula i-bot sizosebenzisa umtapo wolwazi telebot (pip install pytelegrambotapi). Ukusebenzisa umtapo wolwazi subprocess Sizokwenza imiyalo kuseva.

Ukusebenzisa i-bot

Kuseva sakha ifayela le-bot.py:
nano bot.py

Bese unamathisele ikhodi kuyo:

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

Sishintsha ithokheni ye-bot kuyo naleyo ekhishwe ngu-@BotFather, kanye ne-user_id ngevelu ye-id ye-akhawunti yakho. Ukuqinisekisa i-ID yomsebenzisi kuyadingeka ukuze i-bot inikeze ukufinyelela kuseva yakho kuwena kuphela. Umsebenzi check_output() ikhiphe umyalo odlulisiwe bese ibuyisela umphumela.

Okusele nje ukwethula i-bot. Ukuqalisa izinqubo kuseva engikhetha ukuyisebenzisa screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(lapho okuthi "ServerBot" kuyi-ID yenqubo)

Inqubo izoqala ngokuzenzakalelayo ngemuva. Masingene engxoxweni ne-bot futhi sihlole ukuthi yonke into isebenza njengoba kufanele:

Ukufinyelela kuseva ye-linux usebenzisa i-Telegraph bot kuPython

Siyakuhalalisela! I-bot yenza imiyalo ethunyelwe kuyo. Manje, ukuze ufinyelele iseva, udinga nje ukuvula inkhulumomphendvulwano ne-bot.

Iphinda imiyalo

Ngokuvamile, ukuqapha isimo seseva, kufanele usebenzise imiyalo efanayo. Ngakho-ke, ukuqaliswa kokuphindaphinda imiyalo ngaphandle kokuyithumela futhi kuzofaneleka kakhulu.

Sizoyisebenzisa sisebenzisa izinkinobho ezisemlayini ngaphansi kwemilayezo:

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

Qala kabusha i-bot:

killall python3
screen -dmS ServerBot python3 bot.py

Ake sihlole futhi ukuthi yonke into isebenza kahle yini:

Ukufinyelela kuseva ye-linux usebenzisa i-Telegraph bot kuPython

Uma uchofoza inkinobho ngaphansi komlayezo, i-bot kufanele iphinde umyalo umlayezo othunyelwe kuwo.

Esikhundleni isiphetho

Yiqiniso, le ndlela ayenzi sengathi ithatha indawo yezindlela zokuxhuma ze-classical, noma kunjalo, ikuvumela ukuthi uthole ngokushesha mayelana nesimo seseva futhi uyithumele imiyalo engadingi ukuphuma okuyinkimbinkimbi.

Source: www.habr.com

Engeza amazwana