VKBotLongPoll [рдкрд╛рдпрдерди] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реАрдХреЗ рдмреЙрдЯ рдХреЛ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдмрдирд╛рдирд╛ рдФрд░ рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдмреЙрдЯ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдкрд╛рдпрдерди 3.x рдореЗрдВ рд╡реАрдХреЗ рд╕рдореВрд╣ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░реЗрдВрдЧреЗ

рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?


рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдкрдиреЗ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдмреЙрдЯ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЯреАрдореЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдФрд░ рдЙрдЪрд┐рдд рдЙрддреНрддрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ

рдореБрдЦреНрдп рдЪрд░рдг



рдПрдХ рдмреЙрдЯ рд╕рдореВрд╣ рдмрдирд╛рдирд╛


рд╣рдо рдПрдХ рдмреЙрдЯ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╡реАрдХреЗ рд╣реЛрдЧрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рд╕рдореВрд╣реЛрдВ" тЖТ "рдПрдХ рд╕рдореБрджрд╛рдп рдмрдирд╛рдПрдВред"

рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдореБрджрд╛рдп рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирд╛рдо, рд╕рдореВрд╣ рдереАрдо рджрд░реНрдЬ рдХрд░реЗрдВред

рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░, "рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ" рдЪреБрдиреЗрдВред

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдПрдХ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдлрд┐рд░ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЕрдкрдиреА рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реАрдХреЗ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреА рд╣реЛрдЧреАред рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк API рдХреБрдВрдЬреА рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рд╣рдореЗрдВ рдЕрднреА рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдлрд┐рд░ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рд╕рдВрджреЗрд╢" рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд▓реВ рдХрд░реЗрдВред "рд╕рдВрджреЗрд╢" рдореЗрдВ "рдмреЙрдЯ рдлреАрдЪрд░реНрд╕" рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ -> "рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред"

рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рдореВрд╣ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВ, рддреЛ рд╣рдо рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдПрдХ рд╕рдореБрджрд╛рдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред

рд▓рд╛рдВрдЧ рдкреЛрд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛


рд▓реЙрдиреНрдЧ рдкреЛрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо vk_api рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ API рдЯреЛрдХрди рдХреЛ config.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ, рд╡рд╣рд╛рдБ рд╕реЗ рд╣рдо рдЕрдкрдиреА рдХреБрдВрдЬреА рд▓реЛрдб рдХрд░реЗрдВрдЧреЗред

рдЪрд▓реЛ рд╣рдорд╛рд░реА рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░рд╣реЛрдо рдирд╛рдо рджреЗрдВ, рдЬреЛ рдореБрдЦреНрдп рд╕рд░реНрд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдЧрд╛ред

рд╣рдо рдЙрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

import vk_api.vk_api from vk_api.bot_longpoll import VkBotLongPoll from vk_api.bot_longpoll import VkBotEventType 

рдПрдХ рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ:

 class Server: def __init__(self, api_token, group_id, server_name: str="Empty"): #    self.server_name = server_name #  Long Poll self.vk = vk_api.VkApi(token=api_token) #   Long Poll API self.long_poll = VkBotLongPoll(self.vk, group_id) #    vk_api self.vk_api = self.vk.get_api() def send_msg(self, send_id, message): """     messages.send :param send_id: vk id ,    :param message:    :return: None """ self.vk_api.messages.send(peer_id=send_id, message=message) def test(self): #      ID self.send_msg(255396611, "-!") 

рдЕрдм server_manager.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдлрд┐рд▓рд╣рд╛рд▓, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рдХреЛ рдХреЙрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 #     Server from server import Server #   config.py  api-token from config import vk_api_token server1 = Server(vk_api_token, 172998024, "server1") # vk_api_token - API ,     # 172998024 - id - # "server1" -   server1.test() 

рдорд╣рддреНрд╡рдкреВрд░реНрдг!

рдмреЙрдЯ рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдмреЙрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕рдореБрджрд╛рдп рдкреГрд╖реНрда рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкрд╣рд▓реЗ рдмреЙрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреЙрдЯ рд╣рдореЗрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ред

рдЕрдм рдмреЙрдЯ рдХреЛ рдЧреНрд░реБрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕реЗ рдореИрд╕реЗрдЬ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдПрдВред
рдХрд┐рд╕реА рд╕рдореВрд╣ рдореЗрдВ рдмреЙрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдореБрджрд╛рдп рд░рд╛рдЗрдЯ рдореЗрдиреВ рдореЗрдВ "рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдкреНрд░рд╛рд░рдВрдн рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреЙрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╣ рд▓реЙрдиреНрдЧ рдкреЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ "рд╕реБрдирдирд╛" рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ ("рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛" -> "рд▓реЙрдиреНрдЧ рдкреЛрд▓ рдПрдкреАрдЖрдИ" рдЦрдВрдб рдореЗрдВ рдИрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓реЗрдВ):

 def start(self): for event in self.long_poll.listen(): print(event) 

рдЗрд╕реЗ server_manager.py рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдПрдВ:

 server1.start() 

рдЕрдм, рдпрджрд┐ рд╣рдо рд╕рдореВрд╣ рдХреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
<< рд╡рд░реНрдЧ 'vk_api.bot_longpoll.VkBotMessageEvent'> ({'type': 'message_new', 'object': {'date': 1541273151, 'fromid': 25599999999, 'id': 0, 'out': 0) 'peer_id': 2000000001, 'text': '[club172998024 | bot in da Vk] рдпрд╣ рдПрдХ рдкрд╛рда рд╣реИ!', 'рдмрд╛рддрдЪреАрдд_рд╕реНрдореГрддрд┐_id': 187, 'fwd_magesages': [], 'рдорд╣рддреНрд╡рдкреВрд░реНрдг': рдЧрд▓рдд, 'random_id': 0 , 'рд╕рдВрд▓рдЧреНрдирдХ': [], 'is_hidden': рдЧрд▓рдд}, 'group_id': 1729980246))>

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рд╣рдо рдирд┐рдЬреА рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
<< рд╡рд░реНрдЧ 'vk_api.bot_longpoll.VkBotMessageEvent'> ({'type': 'message_new', 'object': {'date': 1541273238, 'fromid': 25599999999, 'id': 47, 'out': 0) 'peer_id': 255396611, 'text': 'рдпрд╣ рдПрдХ рдирд┐рдЬреА рд╕рдВрджреЗрд╢ рд╣реИ', 'рдмрд╛рддрдЪреАрдд_message_id': 47, 'fwd_messages': [], 'рдорд╣рддреНрд╡рдкреВрд░реНрдг': рдЧрд▓рдд, 'random_id': 0, 'рд╕рдВрд▓рдЧреНрдирдХ': [], 'is_hidden ': рдЧрд▓рдд},' group_id ': 172998024})>


рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗ, рд╣рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП , object.from_id, object.id, object.peer_id, object.text ред рд╕рдВрджреЗрд╢реЛрдВ рдФрд░ рд╕рдореВрд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛, object.peer_id рдФрд░ object.id рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдмрд╣реБрдд рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдореВрд╣ рд╕реЗ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ .id 0 рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдореВрд╣ рд╕реЗ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рд╣рдо рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 def start(self): for event in self.long_poll.listen(): #   #    if event.type == VkBotEventType.MESSAGE_NEW: print("Username: " + self.get_user_name(event.object.from_id)) print("From: " + self.get_user_city(event.object.from_id)) print("Text: " + event.object.text) print("Type: ", end="") if event.object.id > 0: print("private message") else: print("group message") print(" --- ") def get_user_name(self, user_id): """   """ return self.vk_api.users.get(user_id=user_id)[0]['first_name'] def get_user_city(self, user_id): """   """ return self.vk_api.users.get(user_id=user_id, fields="city")[0]["city"]['title'] 


рд╣рдо рдмреЙрдЯ рдХреЛ рджреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦреЗрдВрдЧреЗ: рдПрдХ рд╕рдореВрд╣ рд╕реЗ, рдПрдХ рдкреАрдПрдо рд╕реЗред рдлрд┐рд░ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: рдЖрд░реНрдерд░
рдкреНрд░реЗрд╖рдХ: рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ
рдкрд╛рда: [club172998024 | @ club172998024] рдпрд╣ рд╕рдореВрд╣ рдХрд╛ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ
рдкреНрд░рдХрд╛рд░: рд╕рдореВрд╣ рд╕рдВрджреЗрд╢
-
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: рдЖрд░реНрдерд░
рдкреНрд░реЗрд╖рдХ: рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ
рдкрд╛рда: рдпрд╣ рдПрдХ рдирд┐рдЬреА рд╕рдВрджреЗрд╢ рд╣реИ
рдкреНрд░рдХрд╛рд░: рдирд┐рдЬреА рд╕рдВрджреЗрд╢
-

рдЯрд┐рдкреНрдкрдгреА


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдореВрд╣ рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕реЗ рдкрд╣рд▓реЗ [club172998024 | @ club172998024] рд╣реИ, рдЯреАрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╕рднреА рдкрддреНрд░рд╛рдЪрд╛рд░ рддрдХ рдмреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, vk_api рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡реАрдХреЗ рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рд╣рдордиреЗ users.get рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ: vk.com/dev/methods

рдореИрдВ рдЖрдкрдХреЛ рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзреНрдпрдпрди рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╡реАрдХреЗ рдиреЗ рд╣рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдкреНрд░рд▓реЗрдЦрди рдкреНрд░рджрд╛рди рдХрд┐рдП, рд░реВрд╕реА рдореЗрдВ рднреАред

рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдореЗрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВред

 def send_message(self, peer_id, message): self.vk_api.messages.send(peer_id=peer_id, message=message) 

<peer_id> рдЧрдВрддрд╡реНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдХрд┐рд╕реА рдХреЗ рд╕рдВрджреЗрд╢ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо event.object.peer_id рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ peer_id рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред рдпрд╛рдиреА рд╣рдо рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВрдЧреЗ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВ:

 def start(self): for event in self.long_poll.listen(): #   #    if event.type == VkBotEventType.MESSAGE_NEW: username = self.get_user_name(event.object.from_id) print("Username: " + username) print("From: " + self.get_user_city(event.object.from_id)) print("Text: " + event.object.text) print("Type: ", end="") if event.object.id > 0: print("private message") else: print("group message") print(" --- ") self.send_message(event.object.peer_id, f"{username},    !") 

рдЕрдм, рдпрджрд┐ рдмреЙрдЯ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рд╢реИрд▓реА рдореЗрдВ рд╣рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдЧрд╛:
рдЖрд░реНрдерд░, рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛!

рдкреВрд░рд╛ рдХреЛрдб

server.py


 import vk_api.vk_api from vk_api.bot_longpoll import VkBotLongPoll from vk_api.bot_longpoll import VkBotEventType class Server: def __init__(self, api_token, group_id, server_name: str="Empty"): #    self.server_name = server_name #  Long Poll self.vk = vk_api.VkApi(token=api_token) #   Long Poll API self.long_poll = VkBotLongPoll(self.vk, group_id, wait=20) #    vk_api self.vk_api = self.vk.get_api() def send_msg(self, send_id, message): """     messages.send :param send_id: vk id ,    :param message:    :return: None """ self.vk_api.messages.send(peer_id=send_id, message=message) def test(self): self.send_msg(255396611, "-!") def start(self): for event in self.long_poll.listen(): #   #    if event.type == VkBotEventType.MESSAGE_NEW: username = self.get_user_name(event.object.from_id) print("Username: " + username) print("From: " + self.get_user_city(event.object.from_id)) print("Text: " + event.object.text) print("Type: ", end="") if event.object.id > 0: print("private message") else: print("group message") print(" --- ") self.send_message(event.object.peer_id, f"{username},    !") def get_user_name(self, user_id): """   """ return self.vk_api.users.get(user_id=user_id)[0]['first_name'] def get_user_city(self, user_id): """   """ return self.vk_api.users.get(user_id=user_id, fields="city")[0]["city"]['title'] def send_message(self, peer_id, message): self.vk_api.messages.send(peer_id=peer_id, message=message) 

server_manager.py


 #     Server from server import Server #   config.py  api-token from config import vk_api_token server1 = Server(vk_api_token, 172998024, "server1") server1.start() 


рд╕рд╛рдордЧреНрд░реА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп:


рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ peer_id рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдореБрджрд╛рдп рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдПрдХ рддрд╕реНрд╡реАрд░ рднреЗрдЬрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧреА рдбреЙрдХ: vk.com/dev/messages.send

рдирд┐рд░реНрдгрдп
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдореВрд╣ рдХреЛ рдлреЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╡реАрдХреЗ рдореЗрдВ рдЦреЛрд▓реЗрдВ, рд▓рд┐рдВрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
vkcom / club172998024; z = рдлреЛрдЯреЛ -172998024_456239017 % 2Falbum-172998024_256250731

рд╣рдо рдХреЗрд╡рд▓ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рднрд╛рдЧ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: рдлреЛрдЯреЛ -172998024_456239017 рдореИрд╕реЗрдЬ.рд╕реЗрдВрдб рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ:

 def send_img(self, peer_id): self.vk_api.messages.send(peer_id=peer_id, attachment="photo-172998024_456239017") 

рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:



рд╡рд╣ рд╕рдм рдореВрд▓ рдмрд╛рддреЗрдВ рд╣реИрдВред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ vk_api рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЙрдирдХреА рдкреВрд░реА рд╕реВрдЪреА рд╣реИ: vk.com/dev/methods ред рдпрджрд┐ рдЖрдк рд╡реАрдХреЗ рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рдмреЙрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрдзреНрдпрдпрди рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдмреЙрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг: github.com/AppLoidx/GroupAssistant/tree-MGmaster

рдЕрдм рд╣рдо рдмреЙрдЯ рд▓реЙрдЬрд┐рдХ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


рдХрдорд╛рдВрдбрд░рд╣реЛрдо рдмрдирд╛рдПрдБ, рдЬреЛ рдХрдорд╛рдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рд╡реАрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреА рдЧрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛:

 class Commander: def __init__(self, vk_api, user_id): self.vk_api = vk_api self.user_id = user_id def input(self, msg): """     :param msg:  :return:  ,   """ pass 

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:


рд╣рдо рд▓рд╛рдВрдЧ рдкреЛрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП "рд╕реБрдирддреЗ рд╣реИрдВ" рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ ->
рд╣рдо Commander.input рдХреЛ рд╕рдВрджреЗрд╢ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ () -> рдореЛрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ -> рдХрдорд╛рдВрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ ->
рд╣рдо рдЙрддреНрддрд░ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ -> рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

рдореЛрдб рдФрд░ рдХрдорд╛рдВрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдХрдорд╛рддреЗ рд╣реИрдВ command_enum.py рдФрд░ mode_enum.pyред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо Enum рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЛрдб рдФрд░ рдХрдорд╛рдВрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:

command_enum.py:


 from enum import Enum class Command(Enum): """ weather """ weather = ["weather", ""] """ myanimelist """ anime_top = ["top anime", " "] 


mode_enum.py:


 from enum import Enum class Mode(Enum): default = [" ", "default"] translate = [" ", "translate"] get_ans = 0 


рдореЛрдб рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, [рд╕реНрд▓реИрд╢ ("/") + <рдореЛрдб_рдирд╛рдо>] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рд╣рдо рдЕрдиреНрдп рд╕рднреА рдХрдорд╛рдВрдб рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рд╣рдо рдЗрд╕реЗ Commander.py рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 #  ,  from command_enum import Command from mode_enum import Mode #   from translate.yandex_translate import Translator from weather import Weather from myanimelist import Myanimelist # Config from config import yandex_translate_api class Commander: def __init__(self): # ,   self.now_mode = Mode.default self.last_mode = Mode.default self.last_command = None #     self.last_ans = None #    self.translator = Translator(yandex_translate_api) def change_mode(self, to_mode): """     :param to_mode:   """ self.last_mode = self.now_mode self.now_mode = to_mode self.last_ans = None def input(self, msg): """     :param msg:  :return:  ,   """ #      if msg.startswith("/"): for mode in Mode: if msg[1::] in mode.value: self.change_mode(mode) return "   " + self.now_mode.value[0] return "  " + msg[1::] #    if self.now_mode == Mode.get_ans: self.last_ans = msg self.now_mode = self.last_mode return "Ok!" if self.now_mode == Mode.default: #  if msg in Command.weather.value: return Weather.get_weather_today() #   if msg in Command.anime_top.value: res = "" top = Myanimelist.get_top() for anime in top: res += anime + " : " + top[anime] + "\n" return res if self.now_mode == Mode.translate: if self.last_ans is None: #    ,    self.change_mode(Mode.get_ans) self.last_command = msg return "     " elif self.last_ans == "change": #    self.last_ans = None self.change_mode(Mode.default) else: #  return self.translator.translate_to(msg, self.last_ans) return "  !" 

weather.py
 import requests from bs4 import BeautifulSoup class Weather: @staticmethod def get_weather_today(city: str = "-") -> list: http = "https://sinoptik.com.ru/-" + city b = BeautifulSoup(requests.get(http).text, "html.parser") p3 = b.select('.temperature .p3') weather1 = p3[0].getText() p4 = b.select('.temperature .p4') weather2 = p4[0].getText() p5 = b.select('.temperature .p5') weather3 = p5[0].getText() p6 = b.select('.temperature .p6') weather4 = p6[0].getText() result = '' result = result + (' :' + weather1 + ' ' + weather2) + '\n' result = result + (' :' + weather3 + ' ' + weather4) + '\n' temp = b.select('.rSide .description') weather = temp[0].getText() result = result + weather.strip() return result 


myanimelist.py
 import requests import bs4 class Myanimelist: @staticmethod def get_top(count: int=5, by: str="") -> dict: types = ["", "airing", "upcoming", "tv", "movie", "ova", "special", "bypopularity", "favorite"] if by not in types: return {"error: ": " !"} html = requests.get("https://myanimelist.net/topanime.php?type="+by) soup = bs4.BeautifulSoup(html.text, "html.parser") res = {} for anime in soup.select(".ranking-list", limit=count): url = anime.select(".hoverinfo_trigger")[0]['href'] anime = anime.select(".hoverinfo_trigger")[0].findAll("img")[0] name = anime['alt'].split(":")[1].strip(" ") res[name] = url return res 


yandex_translate.py
 import requests from config import yandex_translate_api class Translator: """ -  API Yandex Translate : _key --   API Yandex.Translate _yandex_comment --       API Yandex.Translate """ def __init__(self, key, comment=None): """ :param key:   API Yandex.Translate :param comment:     """ self._key = key if comment is None: self._yandex_comment = "\n  ┬л.┬╗ http://translate.yandex.ru/" else: self._yandex_comment = comment def translate(self, text, lang, to_lang=None): """         :param text: ,    :param lang:   :param to_lang:   :return:   """ if to_lang is not None: lang = f"{lang}-{to_lang}" main_url = "https://translate.yandex.net/api/v1.5/tr.json/translate" response = requests.get(f"{main_url}?" f"key={self._key}&" f"lang={lang}&" f"text={text}") return response.json()['text'][0] + self._yandex_comment def lang_identify(self, text, hint="ru,en"): """   :param text:  :param hint:     :return:   """ main_url = "https://translate.yandex.net/api/v1.5/tr.json/detect" response = requests.get(f"{main_url}?" f"key={self._key}&" f"hint={hint}&" f"text={text}") return response.json()['lang'] def translate_ru_en(self, text): """       :param text: ,    :return:      """ if self.lang_identify(text) == "ru": to_lang = "en" from_lang = "ru" else: to_lang = "ru" from_lang = "en" return self.translate(text, from_lang, to_lang) def translate_to_ru(self, text, hint=None): """     :param text: ,    :param hint:     :return:      """ if hint is None: hint = "ru,en" from_lang = self.lang_identify(text, hint) return self.translate(text, from_lang, "ru") def translate_to(self, text, to_lang, hint=None): """      :param text: ,    :param to_lang:    :param hint:     :return:   """ if hint is None: hint = "ru,en" from_lang = self.lang_identify(text, hint) return self.translate(text, from_lang, to_lang) 


рд╕рднреА рдХреЛрдб github: github.com/AppLoidx/VkLongPollBot рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ

рдПрдХ рдХреАрдмреЛрд░реНрдб рдЬреЛрдбрд╝реЗрдВ:


рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╕рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рддрдм рдмрди рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдХреАрдмреЛрд░реНрдб рдХреЛ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдореЛрдб рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИред

рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреАрдмреЛрд░реНрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рднреЗрдЬреЗрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 vk_api.messages.send(...,keyboard=keyboard_json,...) 

рдпрд╛ рдЖрдк .json рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реАрдзреЗ рдХреАрдмреЛрд░реНрдб рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 vk_api.messages.send(...,keyboard=open(filename,"r",encoding="UTF-8").read() 

рдкреНрд░рд▓реЗрдЦрди: vk.com/dev/bots_docs_3?f=4.%2BKeyboard%2Bfor%2Bworks

рдПрдХ рдХреАрдмреЛрд░реНрдб рдЬреЛрдбрд╝рдХрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ keyboard.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:

 { "one_time": false, "buttons": [ [{ "action": { "type": "text", "label": "top anime" }, "color": "positive" }, { "action": { "type": "text", "label": "weather" }, "color": "positive" }], [{ "action": { "type": "text", "label": "translate" }, "color": "default" }] ] } 

рдХреАрдмреЛрд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЦрд╛рд▓реА рдмрдЯрди рдХреЗ рд╕рд╛рде json рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 {"buttons":[],"one_time":true} 

Send_message рдХреЛ рд╕рд░реНрд╡рд░рд╣реЛрдо рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ:

 def send_msg(self, send_id, message): """     messages.send :param send_id: vk id ,    :param message:    :return: None """ return self.vk_api.messages.send(peer_id=send_id, message=message, keyboard=open("keyboards/default.json", "r", encoding="UTF-8").read()) 

рдФрд░ рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ рднреА:

 def start(self): for event in self.long_poll.listen(): #   if event.type == VkBotEventType.MESSAGE_NEW: if event.object.from_id not in self.users: self.users[event.object.from_id] = Commander() #    if event.type == VkBotEventType.MESSAGE_NEW: self.send_msg(event.object.peer_id, self.users[event.object.from_id].input(event.object.text)) 

рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:



рдЕрдВрддрд┐рдо рд╢рдмреНрдж


рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдирдВрдЧреЗ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдмреЗрд╣рддрд░ рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡реЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдПрдХ рд╕рдореВрд╣ рд╕рд╣рд╛рдпрдХ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреЙрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдЬреЛ рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рдХреИрд╕реЗ:

  • рд╕рдореВрд╣ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдХрддрд╛рд░реЗрдВ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрддрд╛рд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдИ рдЯреАрдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЬреЛрдбрд╝рдирд╛, рд╣рдЯрд╛рдирд╛, рдмрдирд╛рдирд╛ рдЖрджрд┐ред
  • рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ
  • рдкреВрдЫреЗ рдЧрдП рдкреНрд░рд╢реНрди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдореЗрдВ)
  • рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдкрддреНрд░ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред

рдЬреАрдердм рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддреБрдд рд╕реВрддреНрд░

Source: https://habr.com/ru/post/hi428680/


All Articles