Ukufikelela kwiseva yelinux usebenzisa iTelegram bot kwiPython

Ngokuqhelekileyo kukho iimeko apho ukufikelela kumncedisi kuyadingeka apha kwaye ngoku. Nangona kunjalo, ukudibanisa nge-SSH akusoloko kuyeyona ndlela ifanelekileyo, kuba usenokungabi nomxhasi we-SSH, idilesi yomncedisi okanye indibaniselwano yomsebenzisi/yegama lokugqithisa esandleni. Ewe kunjalo IWebmin, eyenza ulawulo lube lula, kodwa aluboneleli ngokufikelela kwangoko.

Ngoko ndagqiba ekubeni ndiphumeze isisombululo esilula kodwa esinomdla. Oko kukuthi, bhala i-Telegram bot ukuba, xa iqaliswe kwiseva ngokwayo, iya kwenza imiyalelo ethunyelwe kuyo kwaye ibuyisele umphumo. Emva kokufunda eziliqela amanqaku Kulo mxholo, ndaqonda ukuba akukho mntu uchaze ukuphunyezwa okunjalo.

Ndiphumeze le projekthi ku-Ubuntu 16.04, kodwa ukuqaliswa okungenazinkathazo kwezinye izinikezelo ndizamile ukwenza yonke into ngendlela eqhelekileyo.

Ukubhaliswa kweBot

Ukubhalisa ibhot entsha nge @BotFather. Sithumela kuye /newbot nangaphezulu kwisicatshulwa. Siza kufuna ithokheni yebhot entsha kunye ne-id yakho (ungayifumana, umzekelo, ukusuka @userinfobot).

Ukulungiswa kwePython

Ukuphehlelela ibhot siza kusebenzisa ithala leencwadi telebot (pip install pytelegrambotapi). Ukusebenzisa ithala leencwadi subprocess Siza kuphumeza imiyalelo kwiseva.

Ukubaleka ibhot

Kwiseva senza ifayile ye-bot.py:
nano bot.py

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

Sibuyisela ithokheni yebhot kuyo leyo ikhutshwe ngu-@BotFather, kunye ne-user_id ngexabiso le-id yeakhawunti yakho. Ukuqinisekisa i-ID yomsebenzisi kuyimfuneko ukuze i-bot ibonelele ukufikelela kwiseva yakho kuphela kuwe. Umsebenzi check_output() yenza umyalelo ogqithisiweyo kwaye ibuyisela isiphumo.

Ekuphela kwento eseleyo kukusungula i-bot. Ukuqhuba iinkqubo kumncedisi endifuna ukuwusebenzisa screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(apho "ServerBot" yinkqubo ye-ID)

Inkqubo iya kuqala ngokuzenzekelayo ngasemva. Masingene kwingxoxo kunye ne-bot kwaye sijonge ukuba yonke into isebenza njengoko kufanelekile:

Ukufikelela kwiseva yelinux usebenzisa iTelegram bot kwiPython

Sivuyisana nawe! Ibhot yenza imiyalelo ethunyelwe kuyo. Ngoku, ukufikelela kumncedisi, kufuneka uvule incoko kunye ne-bot.

Ukuphinda imiyalelo

Rhoqo, ukujonga imeko yomncedisi, kufuneka uqhube imiyalelo efanayo. Ngoko ke, ukuphunyezwa kokuphinda imiyalelo ngaphandle kokuyithumela kwakhona kuya kufaneleka kakhulu.

Siza kuyiphumeza sisebenzisa amaqhosha angaphakathi phantsi kwemiyalezo:

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 kwakhona i-bot:

killall python3
screen -dmS ServerBot python3 bot.py

Masijonge kwakhona ukuba yonke into isebenza ngokuchanekileyo:

Ukufikelela kwiseva yelinux usebenzisa iTelegram bot kwiPython

Xa ucofa iqhosha phantsi komyalezo, i-bot kufuneka iphinde umyalelo apho umyalezo uthunyelwe khona.

Endaweni yesiphelo

Ngokuqinisekileyo, le ndlela ayizenzi ngathi ithatha indawo yeendlela zokudibanisa zakudala, nangona kunjalo, ikuvumela ukuba ufumanise ngokukhawuleza malunga nemeko yomncedisi kwaye uyithumele imiyalelo engayifuniyo imveliso enzima.

umthombo: www.habr.com

Yongeza izimvo