เชชเชพเชฏเชฅเซ‹เชจเชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเชฟเชจเช•เซเชธ เชธเชฐเซเชตเชฐเชจเซ€ เชเช•เซเชธเซ‡เชธ

เช˜เชฃเซ€ เชตเชพเชฐ เชเชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“ เชนเซ‹เชฏ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชธเชฐเซเชตเชฐเชจเซ€ เชเช•เซเชธเซ‡เชธ เช…เชนเซ€เช‚ เช…เชจเซ‡ เช…เชคเซเชฏเชพเชฐเซ‡ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เช›เซ‡. เชœเซ‹ เช•เซ‡, SSH เชฆเซเชตเชพเชฐเชพ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเซเช‚ เช เชนเช‚เชฎเซ‡เชถเชพ เชธเซŒเชฅเซ€ เช…เชจเซเช•เซ‚เชณ เชฐเซ€เชค เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ SSH เช•เซเชฒเชพเชฏเช‚เชŸ, เชธเชฐเซเชตเชฐ เชธเชฐเชจเชพเชฎเซเช‚, เช…เชฅเชตเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ/เชชเชพเชธเชตเชฐเซเชก เชธเช‚เชฏเซ‹เชœเชจ เชนเชพเชฅ เชชเชฐ เชจ เชนเซ‹เชˆ เชถเช•เซ‡. เช…เชฒเชฌเชคเซเชค เชนเซ‹เชฏ เช›เซ‡ เชตเซ‡เชฌเชฎเซ…เชจ, เชœเซ‡ เชตเชนเซ€เชตเชŸเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชคเซเชตเชฐเชฟเชค เชเช•เซเชธเซ‡เชธ เชชเชฃ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชคเซเช‚ เชจเชฅเซ€.

เชคเซ‡เชฅเซ€ เชฎเซ‡เช‚ เชเช• เชธเชฐเชณ เชชเชฃ เชฐเชธเชชเซเชฐเชฆ เช‰เช•เซ‡เชฒ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚. เชเชŸเชฒเซ‡ เช•เซ‡, เชเช• เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‡ เชœเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เชœ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡, เชคเซ‡เชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐเชค เช•เชฐเชถเซ‡. เช…เชญเซเชฏเชพเชธ เช•เชฐเซเชฏเซ‹ เช›เซ‡ เช•เซ‡เชŸเชฒเชพเช• เชฒเซ‡เช–เซ‹ เช† เชตเชฟเชทเชฏ เชชเชฐ, เชฎเชจเซ‡ เชธเชฎเชœเชพเชฏเซเช‚ เช•เซ‡ เชนเชœเซ€ เชธเซเชงเซ€ เช•เซ‹เชˆเช เช†เชตเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซเชฏเซเช‚ เชจเชฅเซ€.

เชฎเซ‡เช‚ เช† เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช‰เชฌเซเชจเซเชŸเซ 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 เชจเซ‡ เชคเชฎเชพเชฐเชพ เชเช•เชพเช‰เชจเซเชŸเชจเชพ id เชฎเซ‚เชฒเซเชฏ เชธเชพเชฅเซ‡ เชฌเชฆเชฒเซ€เช เช›เซ€เช. เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช†เชˆเชกเซ€ เชคเชชเชพเชธเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ เชœเซ‡เชฅเซ€ เชฌเซ‹เชŸ เชซเช•เซเชค เชคเชฎเชจเซ‡ เชœ เชคเชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐเชจเซ€ เชเช•เซเชธเซ‡เชธ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡. เช•เชพเชฐเซเชฏ check_output() เช†เชชเซ‡เชฒ เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

เชคเซ‡ เชซเช•เซเชค เชฌเซ‹เชŸ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœ เชฐเชนเซ‡ เช›เซ‡. เชธเชฐเซเชตเชฐ เชชเชฐ เชšเชพเชฒเชคเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชฎเชพเชŸเซ‡, เชนเซเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชชเชธเช‚เชฆ เช•เชฐเซเช‚ เช›เซเช‚ screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(เชœเซเชฏเชพเช‚ "เชธเชฐเซเชตเชฐเชฌเซ‹เชŸ" เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ ID เช›เซ‡)

เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช†เชชเชฎเซ‡เชณเซ‡ เชชเซƒเชทเซเช เชญเซ‚เชฎเชฟเชฎเชพเช‚ เชšเชพเชฒเชถเซ‡. เชšเชพเชฒเซ‹ เชฌเซ‹เชŸ เชธเชพเชฅเซ‡เชจเชพ เชธเช‚เชตเชพเชฆ เชชเชฐ เชœเชˆเช เช…เชจเซ‡ เชคเชชเชพเชธเซ€เช เช•เซ‡ เชฌเชงเซเช‚ เชœเซ‹เชˆเช เชคเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡:

เชชเชพเชฏเชฅเซ‹เชจเชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเชฟเชจเช•เซเชธ เชธเชฐเซเชตเชฐเชจเซ€ เชเช•เซเชธเซ‡เชธ

เช…เชญเชฟเชจเช‚เชฆเชจ! เชฌเซ‹เชŸ เชคเซ‡เชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เชนเชตเซ‡, เชธเชฐเซเชตเชฐเชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชฌเซ‹เชŸ เชธเชพเชฅเซ‡ เชธเช‚เชตเชพเชฆ เช–เซ‹เชฒเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช†เชฆเซ‡เชถ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ

เช˜เชฃเซ€เชตเชพเชฐ, เชธเชฐเซเชตเชฐเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชธเชฎเชพเชจ เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเชตเชพ เชชเชกเชถเซ‡. เชคเซ‡เชฅเซ€, เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฎเซ‹เช•เชฒเซเชฏเชพ เชตเชฟเชจเชพ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เช…เชฎเชฒ เช–เซ‚เชฌ เชœ เช…เชฏเซ‹เช—เซเชฏ เชนเชถเซ‡.

เช…เชฎเซ‡ เชธเช‚เชฆเซ‡เชถเชพเช“ เชนเซ‡เช เชณเชจเชพ เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€เชถเซเช‚:

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

เชšเชพเชฒเซ‹ เชซเชฐเซ€ เชคเชชเชพเชธ เช•เชฐเซ€เช เช•เซ‡ เชฌเชงเซเช‚ เชฌเชฐเชพเชฌเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡:

เชชเชพเชฏเชฅเซ‹เชจเชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเชฟเชจเช•เซเชธ เชธเชฐเซเชตเชฐเชจเซ€ เชเช•เซเชธเซ‡เชธ

เชธเช‚เชฆเซ‡เชถเชจเซ€ เชจเซ€เชšเซ‡เชจเซเช‚ เชฌเชŸเชจ เชฆเชฌเชพเชตเซ€เชจเซ‡, เชฌเซ‹เชŸเซ‡ เชคเซ‡ เช†เชฆเซ‡เชถเชจเซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเชตเซ‹ เช†เชตเชถเซเชฏเช• เช›เซ‡ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เช† เชธเช‚เชฆเซ‡เชถ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹.

เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ เชเช• เชจเชฟเชทเซเช•เชฐเซเชท

เช…เชฒเชฌเชคเซเชค, เช† เชชเชฆเซเชงเชคเชฟ เช•เซเชฒเชพเชธเชฟเช• เช•เชจเซ‡เช•เซเชถเชจ เชชเชฆเซเชงเชคเชฟเช“ เชฎเชพเชŸเซ‡ เชฐเชฟเชชเซเชฒเซ‡เชธเชฎเซ‡เชจเซเชŸ เชนเซ‹เชตเชพเชจเซ‹ เชกเซ‹เชณ เช•เชฐเชคเซ€ เชจเชฅเซ€, เชœเซ‹ เช•เซ‡, เชคเซ‡ เชคเชฎเชจเซ‡ เชธเชฐเซเชตเชฐเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเชถเซ‡ เชเชกเชชเชฅเซ€ เชถเซ‹เชงเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช†เชฆเซ‡เชถเซ‹ เชฎเซ‹เช•เชฒเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡เชจเซ‡ เชœเชŸเชฟเชฒ เช†เช‰เชŸเชชเซเชŸเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹