{"id":328804,"date":"2022-01-30T15:00:31","date_gmt":"2022-01-30T15:00:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=328804"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=328804","title":{"rendered":"<span>\u0414\u0435\u043b\u0430\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0412\u041a \u0441 Long Poll VK API, Python, MySQL \u0438 \u0440\u0435\u0448\u0430\u0435\u043c \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e threading<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u043e\u0432 &#8212; \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0435\u0437\u0436\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u043d\u043e \u0432\u0441\u0435 \u0443\u0440\u043e\u043a\u0438, \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0431\u043e\u0442\u0430 \u0432 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0440\u0435\u0432\u0430 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u043d\u044e (\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440).<br \/>\u0410 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 &#171;\u0433\u043b\u0443\u0431\u0438\u043d\u044b&#187; (\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u043d\u044e\/\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u0445 \u0447\u0430\u0442\u043e\u0432 \u0438 \u0434\u043b\u044f \u043b\u0438\u0447\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442\u043e\u0432, \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\" title=\"\" height=\"474\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0f7\/ea2\/5f5\/0f7ea25f5b21089407579ba51ca38fa3.png\" data-width=\"690\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0431\u043e\u0442\u0430 \u043d\u0430 Python \u0441\u0440\u0430\u0437\u0443 (\u0431\u0435\u0437, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>threading<\/strong> \u0438 \u0431\u0435\u0437 <strong>\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/strong>), \u043d\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0434\u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0432 <strong>MainThread <\/strong>(\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435) \u0434\u043b\u044f \u0432\u0441\u0435\u0445. <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c MySQL \u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443:<\/p>\n<p><a href=\"https:\/\/dev.mysql.com\/downloads\/mysql\/\" rel=\"noopener noreferrer nofollow\">https:\/\/dev.mysql.com\/downloads\/mysql\/<\/a><\/p>\n<p>\u0418\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b (\u0434\u043b\u044f Linux):<\/p>\n<pre><code>sudo apt install mysql-server<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 &#8212; \u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b:<\/p>\n<pre><code class=\"css\">pip3 install vk_api pip3 install pymysql<\/code><\/pre>\n<p>\u0412 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 MySQL \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <strong>vktest <\/strong>\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 <strong>user <\/strong>\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 &#8212; <strong>iduser <\/strong>\u0438 <strong>position. <\/strong>\u042f \u0441\u043e\u0437\u0434\u0430\u044e \u0411\u0414 \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u043e\u0439 <strong>utf8mb4:<\/strong><\/p>\n<pre><code class=\"sql\">CREATE SCHEMA vktest DEFAULT CHARACTER SET utf8mb4 ; CREATE TABLE `vktest`.`user` (   `iduser` INT UNSIGNED NOT NULL,   `position` TINYINT UNSIGNED NULL,   PRIMARY KEY (`iduser`));<\/code><\/pre>\n<h2>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"526\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8de\/fa9\/d42\/8defa9d420145285bb411205bf27adc2.png\" data-width=\"498\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0440\u0435\u0434 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u044f\u0442 <em>\u0441\u043b\u0443\u0448\u0430\u043d\u0438\u0435\u043c<\/em> <strong>longpoll<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0440\u0435\u0434. \u0412 \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0442\u0440\u0435\u0434, \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0430\u0439\u0434\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0434\u0430\u043b\u0435\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<p>\u0412 \u043d\u043e\u0432\u043e\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435 \u0431\u043e\u0442 \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0411\u0414, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0411\u0414 \u043d\u0430 \u043d\u043e\u0432\u043e\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0440\u0435\u0434\u044b (\u043a\u043e\u0434 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043b\u0438\u0447\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430):<\/p>\n<pre><code class=\"python\">import vk_api from vk_api import VkUpload from vk_api.utils import get_random_id from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType import threading import requests import random import pymysql import pymysql.cursors   if __name__ == '__main__':     while True:         session = requests.Session()         vk_session = vk_api.VkApi(token=\"%\u0422\u043e\u043a\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 VK%\")         vk = vk_session.get_api()         upload = VkUpload(vk_session)         longpoll = VkBotLongPoll(vk_session, \"%ID \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 VK%\")         try:             for event in longpoll.listen():                 if event.type == VkBotEventType.MESSAGE_NEW and event.from_user:                     threading.Thread(target=processing_message, args=(event.obj.from_id, event.obj.text)).start()         except Exception:             pass <\/code><\/pre>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442 \u0432 <strong>while True <\/strong>\u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0447\u044c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441) \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 4:30 \u043f\u043e \u041c\u0421\u041a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c VK \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0431\u043e\u0442 \u043f\u0430\u0434\u0430\u043b (\u0432\u0438\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b). <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430 &#8212; \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0440\u0438 \u043c\u0435\u043d\u044e, \u0433\u0434\u0435 <strong>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e 1<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 <strong>\u041c\u0435\u043d\u044e 2<\/strong> \u0438 \u0432 <strong>\u041c\u0435\u043d\u044e 3<\/strong>, \u0430 \u043e\u043d\u0438, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043c\u043e\u0433\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 <strong>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e 1<\/strong>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\" title=\"\" height=\"165\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ced\/2df\/559\/ced2df5598ce404c0dccb97c13206d2f.png\" data-width=\"429\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043c\u0435\u043d\u044e \u0432 \u0441\u0430\u043c\u043e\u043c \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"390\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ed\/ca7\/738\/1edca77386f9a4081a8b122091bcf4c7.png\" data-width=\"1047\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0423 \u043d\u0430\u0441 3 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <strong>.json<\/strong> \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 <strong>main.py<\/strong>. \u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <strong>keyboard_main.json <\/strong>\u0431\u0443\u0434\u0435\u0442 \u0441 \u043a\u043e\u0434\u043e\u043c<strong>:<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>keyboard_main.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"one_time\": false,   \"buttons\": [     [{       \"action\": {         \"type\": \"text\",         \"label\": \"\u0426\u0438\u0442\u0430\u0442\u044b \u0414\u0443\u0440\u043e\u0432\u0430\"       },       \"color\": \"default\"     }], [       {       \"action\": {         \"type\": \"text\",         \"label\": \"\u0426\u0438\u0442\u0430\u0442\u044b \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\"       },       \"color\": \"default\"     }]   ] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0439\u043b <strong>keyboard_durov.json<\/strong> \u0441 \u043a\u043e\u0434\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>keyboard_durov.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"one_time\": false,   \"buttons\": [     [{       \"action\": {         \"type\": \"text\",         \"label\": \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0414\u0443\u0440\u043e\u0432\u0430\"       },       \"color\": \"positive\"     }], [       {       \"action\": {         \"type\": \"text\",         \"label\": \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\"       },       \"color\": \"default\"     }]   ] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0439 &#8212; <strong>keyboard_zuckerberg.json<\/strong>:<\/p>\n<details class=\"spoiler\">\n<summary>keyboard_zuckerberg.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"one_time\": false,   \"buttons\": [     [{       \"action\": {         \"type\": \"text\",         \"label\": \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\"       },       \"color\": \"positive\"     }], [       {       \"action\": {         \"type\": \"text\",         \"label\": \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\"       },       \"color\": \"default\"     }]   ] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>target <\/strong>\u0443 \u043d\u0430\u0441 <strong>processing_message<\/strong>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 <strong>main.py <\/strong>\u0441 \u0438\u043c\u0435\u043d\u0435\u043c <strong>processing_message <\/strong>\u0438<strong> <\/strong>c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 <strong>id \u044e\u0437\u0435\u0440\u0430<\/strong> \u0438 <strong>\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/strong>:<\/p>\n<details class=\"spoiler\">\n<summary>processing_message<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def processing_message(id_user, message_text):     number_position = take_position(id_user)      if number_position == 0:         send_message(id_user, \"keyboard_main.json\", \"\u0422\u0435\u0431\u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u0442!\")         add_new_line(id_user)      elif number_position == 1:         if message_text == \"\u0426\u0438\u0442\u0430\u0442\u044b \u0414\u0443\u0440\u043e\u0432\u0430\":             update_position(id_user, \"2\")             send_message(id_user, \"keyboard_durov.json\", durov_quote())         elif message_text == \"\u0426\u0438\u0442\u0430\u0442\u044b \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\":             update_position(id_user, \"3\")             send_message(id_user, \"keyboard_zuckerberg.json\", zuckerberg_quote())         else:             send_message(id_user, \"keyboard_main.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")      elif number_position == 2:         if message_text == \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0414\u0443\u0440\u043e\u0432\u0430\":             send_message(id_user, \"keyboard_durov.json\", durov_quote())         elif message_text == \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\":             update_position(id_user, \"1\")             send_message(id_user, \"keyboard_main.json\", \"\u041c\u044b \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e\")         else:             send_message(id_user, \"keyboard_durov.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")      elif number_position == 3:         if message_text == \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\":             send_message(id_user, \"keyboard_zuckerberg.json\", zuckerberg_quote())         elif message_text == \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\":             update_position(id_user, \"1\")             send_message(id_user, \"keyboard_main.json\", \"\u041c\u044b \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e\")         else:             send_message(id_user, \"keyboard_zuckerberg.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")          else:       send_message(id_user, \"keyboard_main.json\", \"\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430\")<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u0435\u0441\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 <strong>number_position<\/strong> &#8212; \u044d\u0442\u043e <strong>0 <\/strong>(\u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>take_position(id_user)<\/strong> \u0432\u0435\u0440\u043d\u0443\u043b\u0430 <strong>0<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043d\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f), \u0442\u043e \u043e\u043d\u0430 \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u0411\u0414 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 <strong>1 <\/strong>\u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>add_new_line(id_user)<\/strong>, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0435\u0433\u043e \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u0435\u043c\u0443 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 <strong>keyboard_main.json<\/strong>.<\/p>\n<p>\u0415\u0441\u043b\u0438 <strong>number_position<\/strong> \u043e\u0442 <strong>1<\/strong> \u0434\u043e <strong>3<\/strong> &#8212; \u0442\u043e \u0431\u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u0434 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0438 <strong>if-elif-else.<\/strong><\/p>\n<p> \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>take_position(id_user) <\/strong>\u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">def take_position(id_user):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"SELECT position FROM user WHERE iduser = %s\"             cursor.execute(sql, (id_user))             line = cursor.fetchone()             if line is None:                 return_count = 0             else:                 return_count = line[\"position\"]     finally:         connection.close()     return return_count<\/code><\/pre>\n<p>\u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c <strong>add_new_line(id_user) <\/strong>\u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">def add_new_line(id_user):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"INSERT INTO user (iduser, position) VALUES (%s, %s)\"             cursor.execute(sql, (id_user, \"1\"))         connection.commit()     finally:         connection.close()     return<\/code><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0411\u0414 &#8212; \u043e\u043d \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u0431\u043e\u0442\u043e\u043c. \u0418 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f  <strong>update_position(id_user, new_position)<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">def update_position(id_user, new_position):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"UPDATE user SET position = %s WHERE iduser = %s\"             cursor.execute(sql, (new_position, id_user))         connection.commit()     finally:         connection.close()     return<\/code><\/pre>\n<p>\u042d\u0442\u0438 \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0411\u0414 (\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a) \u0438 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0411\u0414. \u042f \u0438\u0437\u043c\u0435\u043d\u044f\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0411\u0414 \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435:<\/p>\n<pre><code class=\"python\">def get_connection():     connection = pymysql.connect(host=\"%name_host%\",                                  user=\"%name_user%\",                                  password=\"%password_user%\",                                  db=\"vktest\",                                  charset=\"utf8mb4\",                                  cursorclass=pymysql.cursors.DictCursor)     return connection<\/code><\/pre>\n<p>\u0418 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u042f \u0432\u044b\u0432\u0435\u043b \u0435\u0451 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>send_message<\/strong>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043c\u0430\u0445\u0438\u043d\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443:<\/p>\n<pre><code class=\"python\">def send_message(id_user, id_keyboard, message_text):     try:         vk.messages.send(              user_id=id_user,              random_id=get_random_id(),              keyboard=open(id_keyboard, 'r', encoding='UTF-8').read(),              message=message_text)     except:         print(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0443 id\" + id_user)<\/code><\/pre>\n<p>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438? \u0410\u0445 \u0434\u0430, \u043d\u0430\u043c \u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u043a\u0440\u0443\u0442\u044b\u0435 \u0446\u0438\u0442\u0430\u0442\u044b \u0414\u0443\u0440\u043e\u0432\u0430 \u0438 \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>durov_quote() \u0438 zuckerberg_quote()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def durov_quote():     durov = ['\u041b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.',              '\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442? \u042d\u0442\u043e \u0436\u0435 \u0440\u0430\u0437\u0434\u0440\u043e\u0431\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u0443\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043d\u044f\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438.',              '\u041a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u0435\u043d\u0430. \u0427\u0430\u0441 \u043e\u0434\u0438\u043d\u043e\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432.',              '\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u2014 \u044d\u0442\u043e \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.',              '\u0412\u0440\u0430\u0442\u044c \u0432\u0440\u0435\u0434\u043d\u043e \u0434\u043b\u044f \u0434\u0443\u0445\u043e\u0432\u043d\u043e\u0439 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438.']     return random.choice(durov)   def zuckerberg_quote():     zuckerberg = ['\u0412 \u043c\u0438\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e '                   '\u043f\u0440\u043e\u0432\u0430\u043b\u044c\u043d\u0430 \u2014 \u043d\u0435 \u0440\u0438\u0441\u043a\u043e\u0432\u0430\u0442\u044c.',                   '\u0414\u0432\u0438\u0433\u0430\u0439\u0442\u0435\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442\u0435, '                   '\u0412\u044b \u0434\u0432\u0438\u0436\u0435\u0442\u0435\u0441\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e.',                   '\u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u043d\u0430\u0442\u044c \u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0435. \u0412\u043e\u043f\u0440\u043e\u0441 \u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a:'                   '\u00ab\u0427\u0442\u043e \u043b\u044e\u0434\u0438 \u0445\u043e\u0442\u044f\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0435\u0431\u0435?\u00bb',                   '\u041b\u044e\u0434\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u043c\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0438\u043c\u0435\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438, '                   '\u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u0435\u0440\u044f\u0442 \u0432 \u0441\u0432\u043e\u0435 \u0434\u0435\u043b\u043e, \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.',                   '\u0412\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0437\u0430\u0434\u0430\u044e \u0441\u0435\u0431\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c: \u0441\u0434\u0435\u043b\u0430\u043b \u043b\u0438 \u044f \u0441\u0430\u043c\u0443\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e '                   '\u044f \u043c\u043e\u0433 \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u0415\u0441\u043b\u0438 \u044f \u043d\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u044e, \u0447\u0442\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430\u0434 \u0441\u0430\u043c\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0433\u0434\u0435 \u044f '                   '\u043c\u043e\u0433\u0443 \u043f\u043e\u043c\u043e\u0447\u044c, \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0432\u043e\u0436\u0443 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f']     return random.choice(zuckerberg)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 Python \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <strong>random<\/strong>.<\/p>\n<p>\u0418 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 <strong>main.py <\/strong>(\u0446\u0435\u043b\u0438\u043a\u043e\u043c) \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>main.py<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import vk_api from vk_api import VkUpload from vk_api.utils import get_random_id from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType import threading import random import pymysql import pymysql.cursors import requests   def get_connection():     connection = pymysql.connect(host=\"%name_host%\",                                  user=\"%name_user%\",                                  password=\"%password_user%\",                                  db=\"vktest\",                                  charset=\"utf8mb4\",                                  cursorclass=pymysql.cursors.DictCursor)     return connection   def send_message(id_user, id_keyboard, message_text):     try:         vk.messages.send(              user_id=id_user,              random_id=get_random_id(),              keyboard=open(id_keyboard, 'r', encoding='UTF-8').read(),              message=message_text)     except:         print(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0443 id\" + id_user)   def add_new_line(id_user):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"INSERT INTO user (iduser, position) VALUES (%s, %s)\"             cursor.execute(sql, (id_user, \"1\"))         connection.commit()     finally:         connection.close()     return   def take_position(id_user):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"SELECT position FROM user WHERE iduser = %s\"             cursor.execute(sql, (id_user))             line = cursor.fetchone()             if line is None:                 return_count = 0             else:                 return_count = line[\"position\"]     finally:         connection.close()     return return_count   def update_position(id_user, new_position):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"UPDATE user SET position = %s WHERE iduser = %s\"             cursor.execute(sql, (new_position, id_user))         connection.commit()     finally:         connection.close()     return   def durov_quote():     durov = ['\u041b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.',              '\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442? \u042d\u0442\u043e \u0436\u0435 \u0440\u0430\u0437\u0434\u0440\u043e\u0431\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u0443\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043d\u044f\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438.',              '\u041a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u0435\u043d\u0430. \u0427\u0430\u0441 \u043e\u0434\u0438\u043d\u043e\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432.',              '\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u2014 \u044d\u0442\u043e \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.',              '\u0412\u0440\u0430\u0442\u044c \u0432\u0440\u0435\u0434\u043d\u043e \u0434\u043b\u044f \u0434\u0443\u0445\u043e\u0432\u043d\u043e\u0439 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438.']     return random.choice(durov)   def zuckerberg_quote():     zuckerberg = ['\u0412 \u043c\u0438\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e '                   '\u043f\u0440\u043e\u0432\u0430\u043b\u044c\u043d\u0430 \u2014 \u043d\u0435 \u0440\u0438\u0441\u043a\u043e\u0432\u0430\u0442\u044c.',                   '\u0414\u0432\u0438\u0433\u0430\u0439\u0442\u0435\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442\u0435, '                   '\u0412\u044b \u0434\u0432\u0438\u0436\u0435\u0442\u0435\u0441\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e.',                   '\u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u043d\u0430\u0442\u044c \u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0435. \u0412\u043e\u043f\u0440\u043e\u0441 \u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a:'                   '\u00ab\u0427\u0442\u043e \u043b\u044e\u0434\u0438 \u0445\u043e\u0442\u044f\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0435\u0431\u0435?\u00bb',                   '\u041b\u044e\u0434\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u043c\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0438\u043c\u0435\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438, '                   '\u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u0435\u0440\u044f\u0442 \u0432 \u0441\u0432\u043e\u0435 \u0434\u0435\u043b\u043e, \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.',                   '\u0412\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0437\u0430\u0434\u0430\u044e \u0441\u0435\u0431\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c: \u0441\u0434\u0435\u043b\u0430\u043b \u043b\u0438 \u044f \u0441\u0430\u043c\u0443\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e '                   '\u044f \u043c\u043e\u0433 \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u0415\u0441\u043b\u0438 \u044f \u043d\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u044e, \u0447\u0442\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430\u0434 \u0441\u0430\u043c\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0433\u0434\u0435 \u044f '                   '\u043c\u043e\u0433\u0443 \u043f\u043e\u043c\u043e\u0447\u044c, \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0432\u043e\u0436\u0443 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f']     return random.choice(zuckerberg)   def processing_message(id_user, message_text):     number_position = take_position(id_user)      if number_position == 0:         send_message(id_user, \"keyboard_main.json\", \"\u0422\u0435\u0431\u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u0442!\")         add_new_line(id_user)      elif number_position == 1:         if message_text == \"\u0426\u0438\u0442\u0430\u0442\u044b \u0414\u0443\u0440\u043e\u0432\u0430\":             update_position(id_user, \"2\")             send_message(id_user, \"keyboard_durov.json\", durov_quote())         elif message_text == \"\u0426\u0438\u0442\u0430\u0442\u044b \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\":             update_position(id_user, \"3\")             send_message(id_user, \"keyboard_zuckerberg.json\", zuckerberg_quote())         else:             send_message(id_user, \"keyboard_main.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")      elif number_position == 2:         if message_text == \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0414\u0443\u0440\u043e\u0432\u0430\":             send_message(id_user, \"keyboard_durov.json\", durov_quote())         elif message_text == \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\":             update_position(id_user, \"1\")             send_message(id_user, \"keyboard_main.json\", \"\u041c\u044b \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e\")         else:             send_message(id_user, \"keyboard_durov.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")      elif number_position == 3:         if message_text == \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\":             send_message(id_user, \"keyboard_zuckerberg.json\", zuckerberg_quote())         elif message_text == \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\":             update_position(id_user, \"1\")             send_message(id_user, \"keyboard_main.json\", \"\u041c\u044b \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e\")         else:             send_message(id_user, \"keyboard_zuckerberg.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")     else:         send_message(id_user, \"keyboard_main.json\", \"\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430\")   if __name__ == '__main__':     while True:         session = requests.Session()         vk_session = vk_api.VkApi(token=\"%\u0422\u043e\u043a\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 VK%\")         vk = vk_session.get_api()         upload = VkUpload(vk_session)         longpoll = VkBotLongPoll(vk_session, \"%ID \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 VK%\")         try:             for event in longpoll.listen():                 if event.type == VkBotEventType.MESSAGE_NEW and event.from_user:                     threading.Thread(target=processing_message, args=(event.obj.from_id, event.obj.text)).start()         except Exception:             pass <\/code><\/pre>\n<\/div>\n<\/details>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5c\/aac\/4f3\/c5caac4f3db46738668e0d009f125c89.PNG\" width=\"501\" height=\"273\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441 \u043c\u0430\u0441\u0441\u0430\u043c\u0438 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u043c, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0431\u043e\u0442\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 \u0432\u0438\u0434\u0435 \u0446\u0438\u043a\u043b\u0430 <strong>longpoll <\/strong>\u0432 \u0446\u0438\u043a\u043b\u0435 <strong>longpoll<\/strong> \u0438 \u0432 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u043c <strong>longpoll<\/strong>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0432\u044b\u0439\u0442\u0438. \u0412\u0441\u0435\u043c \u0443\u0434\u0430\u0447\u0438.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/648591\/\"> https:\/\/habr.com\/ru\/post\/648591\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u043e\u0432 &#8212; \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0435\u0437\u0436\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u043d\u043e \u0432\u0441\u0435 \u0443\u0440\u043e\u043a\u0438, \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0431\u043e\u0442\u0430 \u0432 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0440\u0435\u0432\u0430 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u043d\u044e (\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440).<br \/>\u0410 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 &#171;\u0433\u043b\u0443\u0431\u0438\u043d\u044b&#187; (\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u043d\u044e\/\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u0445 \u0447\u0430\u0442\u043e\u0432 \u0438 \u0434\u043b\u044f \u043b\u0438\u0447\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442\u043e\u0432, \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0431\u043e\u0442\u0430 \u043d\u0430 Python \u0441\u0440\u0430\u0437\u0443 (\u0431\u0435\u0437, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>threading<\/strong> \u0438 \u0431\u0435\u0437 <strong>\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/strong>), \u043d\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0434\u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0432 <strong>MainThread <\/strong>(\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435) \u0434\u043b\u044f \u0432\u0441\u0435\u0445. <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c MySQL \u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443:<\/p>\n<p><a href=\"https:\/\/dev.mysql.com\/downloads\/mysql\/\" rel=\"noopener noreferrer nofollow\">https:\/\/dev.mysql.com\/downloads\/mysql\/<\/a><\/p>\n<p>\u0418\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b (\u0434\u043b\u044f Linux):<\/p>\n<pre><code>sudo apt install mysql-server<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 &#8212; \u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b:<\/p>\n<pre><code class=\"css\">pip3 install vk_api pip3 install pymysql<\/code><\/pre>\n<p>\u0412 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 MySQL \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <strong>vktest <\/strong>\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 <strong>user <\/strong>\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 &#8212; <strong>iduser <\/strong>\u0438 <strong>position. <\/strong>\u042f \u0441\u043e\u0437\u0434\u0430\u044e \u0411\u0414 \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u043e\u0439 <strong>utf8mb4:<\/strong><\/p>\n<pre><code class=\"sql\">CREATE SCHEMA vktest DEFAULT CHARACTER SET utf8mb4 ; CREATE TABLE `vktest`.`user` (   `iduser` INT UNSIGNED NOT NULL,   `position` TINYINT UNSIGNED NULL,   PRIMARY KEY (`iduser`));<\/code><\/pre>\n<h2>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c<\/h2>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0440\u0435\u0434 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u044f\u0442 <em>\u0441\u043b\u0443\u0448\u0430\u043d\u0438\u0435\u043c<\/em> <strong>longpoll<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0440\u0435\u0434. \u0412 \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0442\u0440\u0435\u0434, \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0430\u0439\u0434\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0434\u0430\u043b\u0435\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<p>\u0412 \u043d\u043e\u0432\u043e\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435 \u0431\u043e\u0442 \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0411\u0414, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0411\u0414 \u043d\u0430 \u043d\u043e\u0432\u043e\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0440\u0435\u0434\u044b (\u043a\u043e\u0434 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043b\u0438\u0447\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430):<\/p>\n<pre><code class=\"python\">import vk_api from vk_api import VkUpload from vk_api.utils import get_random_id from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType import threading import requests import random import pymysql import pymysql.cursors   if __name__ == '__main__':     while True:         session = requests.Session()         vk_session = vk_api.VkApi(token=\"%\u0422\u043e\u043a\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 VK%\")         vk = vk_session.get_api()         upload = VkUpload(vk_session)         longpoll = VkBotLongPoll(vk_session, \"%ID \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 VK%\")         try:             for event in longpoll.listen():                 if event.type == VkBotEventType.MESSAGE_NEW and event.from_user:                     threading.Thread(target=processing_message, args=(event.obj.from_id, event.obj.text)).start()         except Exception:             pass <\/code><\/pre>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442 \u0432 <strong>while True <\/strong>\u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0447\u044c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441) \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 4:30 \u043f\u043e \u041c\u0421\u041a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c VK \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0431\u043e\u0442 \u043f\u0430\u0434\u0430\u043b (\u0432\u0438\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b). <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430 &#8212; \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0440\u0438 \u043c\u0435\u043d\u044e, \u0433\u0434\u0435 <strong>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e 1<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 <strong>\u041c\u0435\u043d\u044e 2<\/strong> \u0438 \u0432 <strong>\u041c\u0435\u043d\u044e 3<\/strong>, \u0430 \u043e\u043d\u0438, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043c\u043e\u0433\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 <strong>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e 1<\/strong>:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043c\u0435\u043d\u044e \u0432 \u0441\u0430\u043c\u043e\u043c \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0423 \u043d\u0430\u0441 3 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <strong>.json<\/strong> \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 <strong>main.py<\/strong>. \u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <strong>keyboard_main.json <\/strong>\u0431\u0443\u0434\u0435\u0442 \u0441 \u043a\u043e\u0434\u043e\u043c<strong>:<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>keyboard_main.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"one_time\": false,   \"buttons\": [     [{       \"action\": {         \"type\": \"text\",         \"label\": \"\u0426\u0438\u0442\u0430\u0442\u044b \u0414\u0443\u0440\u043e\u0432\u0430\"       },       \"color\": \"default\"     }], [       {       \"action\": {         \"type\": \"text\",         \"label\": \"\u0426\u0438\u0442\u0430\u0442\u044b \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\"       },       \"color\": \"default\"     }]   ] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0439\u043b <strong>keyboard_durov.json<\/strong> \u0441 \u043a\u043e\u0434\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>keyboard_durov.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"one_time\": false,   \"buttons\": [     [{       \"action\": {         \"type\": \"text\",         \"label\": \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0414\u0443\u0440\u043e\u0432\u0430\"       },       \"color\": \"positive\"     }], [       {       \"action\": {         \"type\": \"text\",         \"label\": \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\"       },       \"color\": \"default\"     }]   ] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0439 &#8212; <strong>keyboard_zuckerberg.json<\/strong>:<\/p>\n<details class=\"spoiler\">\n<summary>keyboard_zuckerberg.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"one_time\": false,   \"buttons\": [     [{       \"action\": {         \"type\": \"text\",         \"label\": \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\"       },       \"color\": \"positive\"     }], [       {       \"action\": {         \"type\": \"text\",         \"label\": \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\"       },       \"color\": \"default\"     }]   ] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>target <\/strong>\u0443 \u043d\u0430\u0441 <strong>processing_message<\/strong>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 <strong>main.py <\/strong>\u0441 \u0438\u043c\u0435\u043d\u0435\u043c <strong>processing_message <\/strong>\u0438<strong> <\/strong>c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 <strong>id \u044e\u0437\u0435\u0440\u0430<\/strong> \u0438 <strong>\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/strong>:<\/p>\n<details class=\"spoiler\">\n<summary>processing_message<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def processing_message(id_user, message_text):     number_position = take_position(id_user)      if number_position == 0:         send_message(id_user, \"keyboard_main.json\", \"\u0422\u0435\u0431\u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u0442!\")         add_new_line(id_user)      elif number_position == 1:         if message_text == \"\u0426\u0438\u0442\u0430\u0442\u044b \u0414\u0443\u0440\u043e\u0432\u0430\":             update_position(id_user, \"2\")             send_message(id_user, \"keyboard_durov.json\", durov_quote())         elif message_text == \"\u0426\u0438\u0442\u0430\u0442\u044b \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\":             update_position(id_user, \"3\")             send_message(id_user, \"keyboard_zuckerberg.json\", zuckerberg_quote())         else:             send_message(id_user, \"keyboard_main.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")      elif number_position == 2:         if message_text == \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0414\u0443\u0440\u043e\u0432\u0430\":             send_message(id_user, \"keyboard_durov.json\", durov_quote())         elif message_text == \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\":             update_position(id_user, \"1\")             send_message(id_user, \"keyboard_main.json\", \"\u041c\u044b \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e\")         else:             send_message(id_user, \"keyboard_durov.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")      elif number_position == 3:         if message_text == \"\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430\":             send_message(id_user, \"keyboard_zuckerberg.json\", zuckerberg_quote())         elif message_text == \"\u0412\u044b\u0439\u0442\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e\":             update_position(id_user, \"1\")             send_message(id_user, \"keyboard_main.json\", \"\u041c\u044b \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e\")         else:             send_message(id_user, \"keyboard_zuckerberg.json\", \"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\")          else:       send_message(id_user, \"keyboard_main.json\", \"\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430\")<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u0435\u0441\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 <strong>number_position<\/strong> &#8212; \u044d\u0442\u043e <strong>0 <\/strong>(\u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>take_position(id_user)<\/strong> \u0432\u0435\u0440\u043d\u0443\u043b\u0430 <strong>0<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043d\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f), \u0442\u043e \u043e\u043d\u0430 \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u0411\u0414 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 <strong>1 <\/strong>\u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>add_new_line(id_user)<\/strong>, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0435\u0433\u043e \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u0435\u043c\u0443 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 <strong>keyboard_main.json<\/strong>.<\/p>\n<p>\u0415\u0441\u043b\u0438 <strong>number_position<\/strong> \u043e\u0442 <strong>1<\/strong> \u0434\u043e <strong>3<\/strong> &#8212; \u0442\u043e \u0431\u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u0434 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0438 <strong>if-elif-else.<\/strong><\/p>\n<p> \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>take_position(id_user) <\/strong>\u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">def take_position(id_user):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"SELECT position FROM user WHERE iduser = %s\"             cursor.execute(sql, (id_user))             line = cursor.fetchone()             if line is None:                 return_count = 0             else:                 return_count = line[\"position\"]     finally:         connection.close()     return return_count<\/code><\/pre>\n<p>\u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c <strong>add_new_line(id_user) <\/strong>\u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">def add_new_line(id_user):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"INSERT INTO user (iduser, position) VALUES (%s, %s)\"             cursor.execute(sql, (id_user, \"1\"))         connection.commit()     finally:         connection.close()     return<\/code><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0411\u0414 &#8212; \u043e\u043d \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u0431\u043e\u0442\u043e\u043c. \u0418 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f  <strong>update_position(id_user, new_position)<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">def update_position(id_user, new_position):     connection = get_connection()     try:         with connection.cursor() as cursor:             sql = \"UPDATE user SET position = %s WHERE iduser = %s\"             cursor.execute(sql, (new_position, id_user))         connection.commit()     finally:         connection.close()     return<\/code><\/pre>\n<p>\u042d\u0442\u0438 \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0411\u0414 (\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a) \u0438 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0411\u0414. \u042f \u0438\u0437\u043c\u0435\u043d\u044f\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0411\u0414 \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435:<\/p>\n<pre><code class=\"python\">def get_connection():     connection = pymysql.connect(host=\"%name_host%\",                                  user=\"%name_user%\",                                  password=\"%password_user%\",                                  db=\"vktest\",                                  charset=\"utf8mb4\",                                  cursorclass=pymysql.cursors.DictCursor)     return connection<\/code><\/pre>\n<p>\u0418 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u042f \u0432\u044b\u0432\u0435\u043b \u0435\u0451 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>send_message<\/strong>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043c\u0430\u0445\u0438\u043d\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443:<\/p>\n<pre><code class=\"python\">def send_message(id_user, id_keyboard, message_text):     try:         vk.messages.send(              user_id=id_user,              random_id=get_random_id(),              keyboard=open(id_keyboard, 'r', encoding='UTF-8').read(),              message=message_text)     except:         print(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0443 id\" + id_user)<\/code><\/pre>\n<p>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438? \u0410\u0445 \u0434\u0430, \u043d\u0430\u043c \u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u043a\u0440\u0443\u0442\u044b\u0435 \u0446\u0438\u0442\u0430\u0442\u044b \u0414\u0443\u0440\u043e\u0432\u0430 \u0438 \u0426\u0443\u043a\u0435\u0440\u0431\u0435\u0440\u0433\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>durov_quote() \u0438 zuckerberg_quote()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def durov_quote():     durov = ['\u041b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.',              '\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442? \u042d\u0442\u043e \u0436\u0435 \u0440\u0430\u0437\u0434\u0440\u043e\u0431\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u0443\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043d\u044f\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438.',              '\u041a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u0435\u043d\u0430. \u0427\u0430\u0441 \u043e\u0434\u0438\u043d\u043e\u0447\u0435\u0441\u0442\u0432\u0430<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-328804","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/328804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=328804"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/328804\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=328804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=328804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=328804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}