ื’ื™ืฉื” ืœืฉืจืช ืœื™ื ื•ืงืก ื‘ืืžืฆืขื•ืช ื‘ื•ื˜ Telegram ื‘-Python

ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื™ืฉ ืžืฆื‘ื™ื ืฉื‘ื”ื ื™ืฉ ืฆื•ืจืš ื‘ื’ื™ืฉื” ืœืฉืจืช ื›ืืŸ ื•ืขื›ืฉื™ื•. ืขื ื–ืืช, ื—ื™ื‘ื•ืจ ื‘ืืžืฆืขื•ืช SSH ื”ื•ื ืœื ืชืžื™ื“ ื”ื“ืจืš ื”ื ื•ื—ื” ื‘ื™ื•ืชืจ, ืžื›ื™ื•ื•ืŸ ืฉืื•ืœื™ ืื™ืŸ ืœืš ืœืงื•ื— SSH, ื›ืชื•ื‘ืช ืฉืจืช ืื• ืฉื™ืœื•ื‘ ืžืฉืชืžืฉ/ืกื™ืกืžื” ื‘ื”ื™ืฉื’ ื™ื“. ื›ืžื•ื‘ืŸ ืฉื™ืฉ Webmin, ืžื” ืฉืžืคืฉื˜ ืืช ื”ื ื™ื”ื•ืœ, ืืš ื”ื•ื ื’ื ืื™ื ื• ืžืกืคืง ื’ื™ืฉื” ืžื™ื™ื“ื™ืช.

ืื– ื”ื—ืœื˜ืชื™ ืœื™ื™ืฉื ืคืชืจื•ืŸ ืคืฉื•ื˜ ืืš ืžืขื ื™ื™ืŸ. ื›ืœื•ืžืจ, ืœื›ืชื•ื‘ ื‘ื•ื˜ ืฉืœ ื˜ืœื’ืจื ืฉื›ืืฉืจ ื™ื•ืคืขืœ ื‘ืฉืจืช ืขืฆืžื•, ื™ื‘ืฆืข ืืช ื”ืคืงื•ื“ื•ืช ืฉื ืฉืœื—ื• ืืœื™ื• ื•ื™ื—ื–ื™ืจ ืืช ื”ืชื•ืฆืื”. ืœืื—ืจ ืฉืœืžื“ ื›ืžื” ืžืืžืจื™ื ื‘ื ื•ืฉื ื–ื”, ื”ื‘ื ืชื™ ืฉืืฃ ืื—ื“ ืขื“ื™ื™ืŸ ืœื ืชื™ืืจ ื™ื™ืฉื•ืžื™ื ื›ืืœื”.

ื™ื™ืฉืžืชื™ ืืช ื”ืคืจื•ื™ืงื˜ ื”ื–ื” ืขืœ ืื•ื‘ื•ื ื˜ื• 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)#ะฒ ัะปัƒั‡ะฐะต ะฟะฐะดะตะฝะธั

ืื ื• ืžื—ืœื™ืคื™ื ืืช ืืกื™ืžื•ืŸ ื”ื‘ื•ื˜ ื‘ื• ื‘ื–ื” ืฉื”ื•ื ืคืง ืขืœ ื™ื“ื™ @BotFather, ื•ืืช user_id ื‘ืขืจืš ื”ืžื–ื”ื” ืฉืœ ื—ืฉื‘ื•ื ืš. ื™ืฉ ืฆื•ืจืš ื‘ื‘ื“ื™ืงืช ืžื–ื”ื” ื”ืžืฉืชืžืฉ ื›ื“ื™ ืฉื”ื‘ื•ื˜ ื™ืกืคืง ื’ื™ืฉื” ืœืฉืจืช ืฉืœืš ืจืง ืœืš. ืคื•ึผื ืงืฆึดื™ึธื” check_output() ืžื‘ืฆืข ืืช ื”ืคืงื•ื“ื” ื”ื ืชื•ื ื” ื•ืžื—ื–ื™ืจ ืืช ื”ืชื•ืฆืื”.

ื ื•ืชืจ ืจืง ืœื”ืคืขื™ืœ ืืช ื”ื‘ื•ื˜. ืœื”ืคืขืœืช ืชื”ืœื™ื›ื™ื ืขืœ ื”ืฉืจืช, ืื ื™ ืžืขื“ื™ืฃ ืœื”ืฉืชืžืฉ screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(ื›ืืฉืจ "ServerBot" ื”ื•ื ืžื–ื”ื” ื”ืชื”ืœื™ืš)

ื”ืชื”ืœื™ืš ื™ืคืขืœ ืื•ื˜ื•ืžื˜ื™ืช ื‘ืจืงืข. ื‘ื•ื ื ืœืš ืœื“ื™ืืœื•ื’ ืขื ื”ื‘ื•ื˜ ื•ื ื‘ื“ื•ืง ืฉื”ื›ืœ ืขื•ื‘ื“ ื›ืžื• ืฉืฆืจื™ืš:

ื’ื™ืฉื” ืœืฉืจืช ืœื™ื ื•ืงืก ื‘ืืžืฆืขื•ืช ื‘ื•ื˜ Telegram ื‘-Python

ืžื–ืœ ื˜ื•ื‘! ื”ื‘ื•ื˜ ืžื‘ืฆืข ืืช ื”ืคืงื•ื“ื•ืช ืฉื ืฉืœื—ื•ืช ืืœื™ื•. ื›ืขืช, ืขืœ ืžื ืช ืœื’ืฉืช ืœืฉืจืช, ืืชื” ืจืง ืฆืจื™ืš ืœืคืชื•ื— ื“ื™ืืœื•ื’ ืขื ื”ื‘ื•ื˜.

ื—ื–ืจื” ืขืœ ื”ืคืงื•ื“ื”

ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ื›ื“ื™ ืœืคืงื— ืขืœ ืžืฆื‘ ื”ืฉืจืช, ืืชื” ืฆืจื™ืš ืœื‘ืฆืข ืืช ืื•ืชืŸ ืคืงื•ื“ื•ืช. ืœื›ืŸ, ื™ื™ืฉื•ื ืคืงื•ื“ื•ืช ื—ื•ื–ืจื•ืช ืžื‘ืœื™ ืœืฉืœื•ื— ืื•ืชืŸ ืžื—ื“ืฉ ื™ื”ื™ื” ืžืื•ื“ ืœื ื‘ืžืงื•ื.

ื ื™ื™ืฉื ืืช ื–ื” ื‘ืืžืฆืขื•ืช ื›ืคืชื•ืจื™ื ืžื•ื˜ื‘ืขื™ื ืžืชื—ืช ืœื”ื•ื“ืขื•ืช:

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

ื‘ื•ื ื ื‘ื“ื•ืง ืฉื•ื‘ ืฉื”ื›ืœ ืขื•ื‘ื“ ื›ืžื• ืฉืฆืจื™ืš:

ื’ื™ืฉื” ืœืฉืจืช ืœื™ื ื•ืงืก ื‘ืืžืฆืขื•ืช ื‘ื•ื˜ Telegram ื‘-Python

ื‘ืœื—ื™ืฆื” ืขืœ ื”ื›ืคืชื•ืจ ืžืชื—ืช ืœื”ื•ื“ืขื”, ืขืœ ื”ื‘ื•ื˜ ืœื—ื–ื•ืจ ืขืœ ื”ืคืงื•ื“ื” ืฉืžืžื ื” ื ืฉืœื—ื” ื”ื•ื“ืขื” ื–ื•.

ื‘ืžืงื•ื ืžืกืงื ื”

ื›ืžื•ื‘ืŸ ืฉืฉื™ื˜ื” ื–ื• ืื™ื ื” ืžืชื™ื™ืžืจืช ืœื”ื™ื•ืช ืชื—ืœื™ืฃ ืœืฉื™ื˜ื•ืช ื”ื—ื™ื‘ื•ืจ ื”ืงืœืืกื™ื•ืช, ืื•ืœื ื”ื™ื ืžืืคืฉืจืช ืœื‘ืจืจ ื‘ืžื”ื™ืจื•ืช ืขืœ ืžืฆื‘ ื”ืฉืจืช ื•ืœืฉืœื•ื— ืืœื™ื• ืคืงื•ื“ื•ืช ืฉืื™ื ืŸ ื“ื•ืจืฉื•ืช ืคืœื˜ ืžื•ืจื›ื‘.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”