рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдмреЙрдЯ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдкрд╛рдпрдерди 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"):
рдЕрдм server_manager.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдлрд┐рд▓рд╣рд╛рд▓, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рдХреЛ рдХреЙрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рдорд╣рддреНрд╡рдкреВрд░реНрдг!
рдмреЙрдЯ рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдмреЙрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕рдореБрджрд╛рдп рдкреГрд╖реНрда рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкрд╣рд▓реЗ рдмреЙрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреЙрдЯ рд╣рдореЗрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ред
рдЕрдм рдмреЙрдЯ рдХреЛ рдЧреНрд░реБрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕реЗ рдореИрд╕реЗрдЬ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдПрдВред
рдХрд┐рд╕реА рд╕рдореВрд╣ рдореЗрдВ рдмреЙрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдореБрджрд╛рдп рд░рд╛рдЗрдЯ рдореЗрдиреВ рдореЗрдВ "рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдкреНрд░рд╛рд░рдВрдн рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреЙрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╣ рд▓реЙрдиреНрдЧ рдкреЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ "рд╕реБрдирдирд╛" рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ ("рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛" -> "рд▓реЙрдиреНрдЧ рдкреЛрд▓ рдПрдкреАрдЖрдИ" рдЦрдВрдб рдореЗрдВ рдИрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓реЗрдВ):
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():
рд╣рдо рдмреЙрдЯ рдХреЛ рджреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦреЗрдВрдЧреЗ: рдПрдХ рд╕рдореВрд╣ рд╕реЗ, рдПрдХ рдкреАрдПрдо рд╕реЗред рдлрд┐рд░ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: рдЖрд░реНрдерд░
рдкреНрд░реЗрд╖рдХ: рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ
рдкрд╛рда: [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():
рдЕрдм, рдпрджрд┐ рдмреЙрдЯ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рд╢реИрд▓реА рдореЗрдВ рд╣рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдЧрд╛:
рдЖрд░реНрдерд░, рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛!
рдкреВрд░рд╛ рдХреЛрдб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"):
server_manager.py
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп:
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ 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 рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
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():
рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

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