āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻŽāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĨāĻžāĻā§ āĻ¯āĻāĻ¨ āĻāĻāĻžāĻ¨ā§ āĻāĻŦāĻ āĻāĻāĻ¨ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, SSH āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻž āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻ¨āĻ¯āĻŧ, āĻāĻžāĻ°āĻŖ āĻāĻĒāĻ¨āĻžāĻ° āĻšāĻžāĻ¤ā§ āĻāĻāĻāĻŋ SSH āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ, āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ āĻŋāĻāĻžāĻ¨āĻž, āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§/āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¸āĻāĻŽāĻŋāĻļā§āĻ°āĻŖ āĻ¨āĻžāĻ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ
āĻŦāĻļā§āĻ¯āĻ āĻāĻā§
āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻ¸āĻšāĻ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻā§āĨ¤ āĻ¯āĻĨāĻž, āĻāĻāĻāĻŋ āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻŦāĻ āĻ˛āĻŋāĻāĻ¤ā§ āĻ¯āĻž, āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻžāĻ˛ā§ āĻšāĻ˛ā§, āĻāĻāĻŋāĻ¤ā§ āĻĒā§āĻ°ā§āĻ°āĻŋāĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻŦā§āĨ¤ āĻĒāĻĄāĻŧāĻžāĻļā§āĻ¨āĻž āĻāĻ°ā§
āĻāĻŽāĻŋ āĻāĻŦā§āĻ¨ā§āĻā§ 16.04 āĻ āĻāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°ā§āĻāĻŋ, āĻ¤āĻŦā§ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ¤āĻ°āĻŖā§ āĻāĻžāĻŽā§āĻ˛āĻž-āĻŽā§āĻā§āĻ¤ āĻ°āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĻāĻŋāĨ¤
āĻŦāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨
@BotFather-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻŽāĻ°āĻž āĻ¤āĻžāĻā§ āĻĒāĻžāĻ āĻžāĻ /newbot
āĻāĻŦāĻ āĻāĻ°āĻ āĻĒāĻžāĻ ā§āĻ¯ā§āĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻ āĻā§āĻā§āĻ¨ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻĄāĻŋ āĻ˛āĻžāĻāĻŦā§ (āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĨā§āĻā§
āĻĒāĻžāĻāĻĨāĻ¨ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋ
āĻŦāĻ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ 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
(āĻ¯ā§āĻāĻžāĻ¨ā§ "āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°āĻŦāĻ" āĻšāĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻ¸ āĻāĻāĻĄāĻŋ)
āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻĒāĻāĻā§āĻŽāĻŋāĻ¤ā§ āĻāĻ˛āĻŦā§āĨ¤ āĻāĻ¸ā§āĻ¨ āĻŦāĻāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻĨā§āĻĒāĻāĻĨāĻ¨ā§ āĻ¯āĻžāĻ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻĻā§āĻāĻŋ āĻ¯ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻŋāĻ¤ āĻ¤ā§āĻŽāĻ¨ āĻāĻžāĻ āĻāĻ°ā§:
āĻ
āĻāĻŋāĻ¨āĻ¨ā§āĻĻāĻ¨! āĻŦāĻ āĻāĻāĻŋāĻ¤ā§ āĻĒā§āĻ°ā§āĻ°āĻŋāĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻāĻ¨, āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻļā§āĻ§ā§ āĻŦāĻāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻ˛āĻžāĻĒ āĻā§āĻ˛āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻĻā§āĻļā§āĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ
āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ, āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ āĻŦāĻ¸ā§āĻĨāĻž āĻ¨āĻŋāĻ°ā§āĻā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ¨āĻž āĻĒāĻžāĻ āĻŋāĻ¯āĻŧā§ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻāĻ°āĻž āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻā§āĻŦāĻ āĻ āĻĒā§āĻ°āĻāĻ˛āĻŋāĻ¤ āĻšāĻŦā§āĨ¤
āĻāĻŽāĻ°āĻž āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻā§āĻ˛āĻŋāĻ° āĻ āĻ§ā§āĻ¨ā§ āĻāĻ¨āĻ˛āĻžāĻāĻ¨ āĻŦā§āĻ¤āĻžāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻŦ:
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