เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Linux เป‚เบ”เบเปƒเบŠเป‰ Telegram bot เปƒเบ™ Python

เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบกเบฑเบเบˆเบฐเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ SSH เบšเปเปˆเปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฐเบ”เบงเบเบ—เบตเปˆเบชเบธเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบฅเบนเบเบ„เป‰เบฒ SSH, เบ—เบตเปˆเบขเบนเปˆเป€เบŠเบตเบŸเป€เบงเบตเบซเบผเบทเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบœเบนเป‰เปƒเบŠเป‰ / เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบขเบนเปˆเปƒเบ™เบกเบท. เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบกเบต Webmin, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบšเปเบฅเบดเบซเบฒเบ™เบ‡เปˆเบฒเบ, เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเปƒเบซเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบฑเบ™เบ—เบต.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‡เปˆเบฒเบเบ”เบฒเบเปเบ•เปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ. เบ„เบท, เบ‚เบฝเบ™ Telegram bot เบ—เบตเปˆ, เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบกเบฑเบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบทเบ™. เบกเบตโ€‹เบเบฒเบ™โ€‹เบชเบถเบโ€‹เบชเบฒโ€‹ เบซเบผเบฒเบเป†เบ„เบฑเป‰เบ‡ เบšเบปเบ”เบ„เบงเบฒเบก เบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบฎเบนเป‰เบงเปˆเบฒเบšเปเปˆเบกเบตเปƒเบœเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ—เบทเปˆเบญ.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เปƒเบ™ Ubuntu 16.04, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ—เบตเปˆเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเปƒเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบเบญเบทเปˆเบ™เป†, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™เบ—เบฒเบ‡เบ—เบปเปˆเบงเป„เบ›.

เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ bot

เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ bot เปƒเปเปˆเบเบฑเบš @BotFather. เบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เปƒเบซเป‰เบฅเบฒเบง /newbot เปเบฅเบฐเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™ token เบชเปเบฒเบฅเบฑเบš bot เปƒเบซเบกเปˆเปเบฅเบฐ id เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบˆเบฒเบ @userinfobot).

เบเบฒเบ™เบเบฐเบเบฝเบก Python

เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง bot เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” telebot (pip install pytelegrambotapi). เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” subprocess เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เปเบฅเปˆเบ™ bot

เปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ 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)#ะฒ ัะปัƒั‡ะฐะต ะฟะฐะดะตะฝะธั

เบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เปเบ—เบ™ bot token เปƒเบ™เบกเบฑเบ™เบ”เป‰เบงเบเบญเบฑเบ™เบ—เบตเปˆเบญเบญเบเปƒเบซเป‰เป‚เบ”เบ @BotFather, เปเบฅเบฐ user_id เบ”เป‰เบงเบเบ„เปˆเบฒ id เบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบเบฒเบ™เบเบงเบ”เบชเบญเบš ID เบœเบนเป‰เปƒเบŠเป‰เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰ bot เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบซเป‰เบเบฑเบšเบ—เปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบŸเบฑเบ‡เบŠเบฑเบ™ check_output() เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบœเปˆเบฒเบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.

เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง bot. เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบ‚เป‰เบญเบเบกเบฑเบเปƒเบŠเป‰ screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(เบšเปˆเบญเบ™เบ—เบตเปˆ "ServerBot" เปเบกเปˆเบ™ ID เบ‚เบฐเบšเบงเบ™เบเบฒเบ™)

เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡. เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบเบฑเบš bot เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ•เบฒเบกเบ—เบตเปˆเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐ:

เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Linux เป‚เบ”เบเปƒเบŠเป‰ Telegram bot เปƒเบ™ Python

เบ‚เปเบชเบฐเปเบ”เบ‡เบ„เบงเบฒเบกเบเบดเบ™เบ”เบต! bot เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบกเบฑเบ™. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ›เบตเบ”เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบเบฑเบš bot.

เบ„เบณเบชเบฑเปˆเบ‡เบŠเป‰เบณ

เป€เบฅเบทเป‰เบญเบเป†, เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบกเบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบŠเป‰เปเบฒเบเบฑเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเบปเปˆเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบˆเบฐเป€เบซเบกเบฒเบฐเบชเบปเบกเบซเบผเบฒเบ.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ›เบธเปˆเบก inline เบžเบฒเบเปƒเบ•เป‰เบ‚เปเป‰เบ„เบงเบฒเบก:

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

เปƒเบซเป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบญเบตเบเบ„เบฑเป‰เบ‡เบงเปˆเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡:

เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Linux เป‚เบ”เบเปƒเบŠเป‰ Telegram bot เปƒเบ™ Python

เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบกเบžเบฒเบเปƒเบ•เป‰เบ‚เปเป‰เบ„เบงเบฒเบก, bot เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบชเบปเปˆเบ‡.

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบซเบฅเบธเบšเป„เบ”เป‰

เปเบ™เปˆเบ™เบญเบ™, เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ—เปเบฒเบ—เปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบงเบดเบ—เบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบšเบšเบ„เบฅเบฒเบชเบชเบดเบ, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เป„เบงเปเบฅเบฐเบชเบปเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™