{"id":481087,"date":"2026-05-26T11:36:34","date_gmt":"2026-05-26T11:36:34","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=481087"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=481087","title":{"rendered":"\u041a\u0430\u043a \u044f \u043d\u0430\u0443\u0447\u0438\u043b\u0430 Telegram-\u0431\u043e\u0442\u0430 \u043d\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432 \u0447\u0430\u0442\u0435 \u0441 \u043c\u0435\u043c\u0430\u043c\u0438: \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u043f\u043e \u0445\u0435\u0448\u0442\u0435\u0433\u0430\u043c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0442\u0435\u043c\u0443"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u0443 \u0432\u0441\u0435\u0445 \u0435\u0441\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 \u0447\u0430\u0442 \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043a\u043e\u043b\u0430\u043c\u0438, \u043d\u043e \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u043c\u0435\u043c\u043e\u0432, \u0444\u043b\u0443\u0434\u0430 \u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0434\u0435\u0432\u0447\u0430\u0447\u0438\u0439 \u0447\u0430\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0446\u0435\u043f\u0442\u044b, \u0440\u0430\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0447\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0442.\u0434. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u044f \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u043b\u0438\u0441\u0442\u0430\u043b\u0430 \u0447\u0430\u0442 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043d\u043e\u0432\u043e\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043a\u0438\u043d\u0443\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u0444\u043e\u0442\u043a\u043e\u0439 \u0441 \u043a\u043e\u0442\u0438\u043a\u043e\u043c \u0438 \u0433\u043e\u0440\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b, \u0442\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u0440\u0438\u0448\u043b\u0430 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u0435\u043c\u0443.<\/p>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0434\u043b\u044f \u043a\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>VPS \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442.\u043a. \u0432 \u043d\u044b\u043d\u0435\u0448\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0431\u0435\u0434\u0430 \u0441 \u0442\u0435\u043b\u0435\u0433\u043e\u0439<\/p>\n<\/li>\n<li>\n<p>\u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0431\u043e\u0442 (\u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e Raspberry Pi)<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0444\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0437\u043c, \u043e\u043d\u043e \u0436\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c &#8212; \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0445\u0435\u0448\u0442\u0435\u0433\u043e\u0432. \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>#\u0446\u0438\u0442\u0430\u0442\u044b &#8212; \u0441\u043c\u0435\u0448\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u0444\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>#\u0440\u0435\u0446\u0435\u043f\u0442 &#8212; \u0432\u0430\u0436\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b, \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0435\u043c \u043a\u043e\u0440\u043c\u0438\u0442\u044c \u043c\u0443\u0436\u0430, \u043a\u0440\u043e\u043c\u0435 \u043c\u0430\u043a\u0430\u0440\u043e\u0448\u0435\u043a \u0441 \u043a\u043e\u0442\u043b\u0435\u0442\u043a\u043e\u0439<\/p>\n<\/li>\n<li>\n<p>#\u043f\u043b\u0430\u043d &#8212; \u043c\u044b \u0436\u0438\u0432\u0435\u043c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u043e\u0440\u043e\u0434\u0430\u0445 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0435 \u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u043f\u043b\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0443\u0441\u043f\u0435\u0442\u044c \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u0432 \u0442\u0435\u0433\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f\/\u0437\u0430\u0431\u044b\u0442\u044c\/\u0437\u0430\u0431\u0438\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0442\u0435\u043c\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0445 ID \u0432 \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 .env. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 ID \u0442\u0435\u043c\u044b, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u0435\u043c\u0443, \u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043b\u044d\u0448\u0430 \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 ID \u0441\u0430\u043c\u043e\u0433\u043e \u0447\u0430\u0442\u0430, \u0431\u0435\u0440\u0435\u043c \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435 \/c\/ \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c -100<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 <code> @BotFather:<\/code> \u043f\u0438\u0448\u0435\u043c <em>\/start<\/em>, \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <em>\/newbot<\/em>, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u043c\u0443 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0431\u043e\u0442\u0430 \u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0435\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#8212; \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043d\u043e \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442\u043e, \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0447\u0438\u0442\u0430\u043b\u0430, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u043e\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0432\u043e \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u0430\u0448 \u0431\u043e\u0442. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0440\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u043c\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u201c\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u043c\u0438\u0440\u0443\u201d \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d telebot \u0438 \u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 TeleBot \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0443\u0448\u0438 (\u043e\u0431\u044a\u0435\u043a\u0442\u0430) \u0438 \u0441\u0430\u0431\u043c\u043e\u0434\u0443\u043b\u044c apihelper \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">from telebot import apihelper, TeleBot<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 dotenv \u0441 load_dotenv \u0438 os \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e &#8212; \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0442\u043e\u043d:<\/p>\n<pre><code class=\"python\">import osfrom dotenv import load_dotenvload_dotenv()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"python\">TOKEN = os.getenv('TOKEN')MAIN = int(os.getenv('MAIN'))QUOTES = int(os.getenv('QUOTES'))PLAN = int(os.getenv('PLAN'))RECOMMEND = int(os.getenv('RECOMMEND'))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f:<\/p>\n<pre><code class=\"python\">THREAD_MAP = {QUOTES: {'#\u0446\u0438\u0442\u0430\u0442'}, #\u043a\u0442\u043e-\u0442\u043e \u043f\u0438\u0448\u0435\u0442 \"\u0446\u0438\u0442\u0430\u0442\u0430\", \u043a\u0442\u043e-\u0442\u043e - \"\u0446\u0438\u0442\u0430\u0442\u044b\", \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u0441\u043b\u043e\u0432\u0430    PLAN: {'#\u043f\u043b\u0430\u043d'},    RECOMMEND: {'#\u0440\u0435\u0446\u0435\u043f\u0442', '#\u0447\u0438\u0442\u0430\u0442\u044c', '#\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c'}, #\u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0442\u0435\u043c\u0443}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0442.\u043a. \u043e\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u043c\u0430\u043b\u043e \u043b\u0438, \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0443\u0448\u0443:<\/p>\n<pre><code class=\"python\">bot = TeleBot(TOKEN)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e: \u0443 \u043d\u0430\u0441 \u0432 \u0447\u0430\u0442\u0435 \u0434\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0442\u0435\u0433\u043e\u043c. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 <code><em>@bot.message_handler<\/em><\/code> \u0441 \u043b\u044f\u043c\u0431\u0434\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">@bot.message_handler(func=lambda message: message.reply_to_message is not None and '#\u0446\u0438\u0442\u0430\u0442' in message.text.lower())<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0437\u0434\u0435\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 <\/p>\n<ul>\n<li>\n<p><code><strong><em>@bot.message_handler<\/em><\/strong><\/code> <strong> <\/strong>&#8212; \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p><strong>func=lambda message <\/strong>&#8212; \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<li>\n<p><strong>message.reply_to_message is not None<\/strong> &#8212; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u043d\u0430 \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p><strong>\u2018#\u0446\u0438\u0442\u0430\u0442\u2019 in message.text.lower()<\/strong> &#8212; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0432\u0435\u0442, \u0430 \u043d\u0430\u0448\u0430 \u043c\u0435\u0442\u043a\u0430, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u043a \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043b\u0438\u0448\u043d\u044e\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0442\u0435\u0433\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u0430 \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438:<\/p>\n<pre><code class=\"python\">def reply_message_quotes(message):    bot.forward_message(chat_id=MAIN,            from_chat_id=message.chat.id,            message_id=message.reply_to_message.message_id,            message_thread_id=QUOTES)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ul>\n<li>\n<p><strong>bot.forward_message<\/strong> &#8212; \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 <\/p>\n<\/li>\n<li>\n<p><strong>chat_id=MAIN <\/strong>&#8212; ID \u0433\u0440\u0443\u043f\u043f\u044b, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p><strong>from_chat_id=<\/strong><a href=\"http:\/\/message.chat.id\" rel=\"noopener noreferrer nofollow\"><strong>message.chat.id<\/strong><\/a><strong> <\/strong>&#8212; ID, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c <\/p>\n<\/li>\n<li>\n<p><strong>message_id=message.reply_to_message.message_id <\/strong>&#8212;  ID \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0442\u0435\u0433\u043e\u043c (<em>message.reply_to_message<\/em>), \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 <em>message_id<\/em> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e\u0431 id \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0432\u0435\u0441\u0438\u043b\u0438 \u0442\u0435\u0433)<\/p>\n<\/li>\n<li>\n<p><strong>message_thread_id=QUOTES <\/strong>&#8212; ID \u0442\u0435\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 3 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u0435\u0433\u043e\u0432, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c 3 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e WET &#8212; \u043f\u043b\u043e\u0445\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0445\u044d\u043d\u0434\u043b\u0435\u0440\u0430 + \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ID \u0442\u0435\u043c\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ID, \u0442.\u043a. \u0444\u0438\u043b\u044c\u0442\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f ID. <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u043c:<\/p>\n<pre><code class=\"python\">if message.reply_to_message is None:    return None<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c ID \u0442\u0435\u043c\u044b, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043b\u043e\u0432\u0430\u0440\u044e, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u0433\u0430, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 ID. \u0422.\u043a. \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <em>any<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 True, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<pre><code class=\"python\">for thread_id, tags in THREAD_MAP.items():    if any(tag in message.text.lower() for tag in tags):        return thread_id<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"python\">def get_thread_id(message):    if message.reply_to_message is None:        return None    for thread_id, tags in THREAD_MAP.items():        if any(tag in message.text.lower() for tag in tags):            return thread_id<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438, \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>reply_message_quotes(message)<\/em>, \u043d\u043e \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c thread_id, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 <em>get_thread_id(message).<\/em> \u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u044e\u0434\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 + \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u044e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <em>logging_config.py<\/em>, \u043a\u043e\u043c\u0443-\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c, \u043d\u043e \u044f \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0431\u043e\u0442\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u043d\u043e\u0448\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u0443\u044e \u043c\u043d\u0435 \u0447\u0430\u0441\u0442\u044c:<\/p>\n<pre><code class=\"python\">import loggingdef setup_logger():    logging.basicConfig(        level=logging.INFO,        format='%(asctime)s - %(levelname)s - %(message)s',        datefmt='%Y-%m-%d %H:%M:%S'    )    return logging.getLogger(__name__)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"python\">from logging_config import setup_loggerlogger = setup_logger()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438. <em>message.reply_to_message<\/em> &#8212; \u0443\u043a\u043e\u0440\u043e\u0442\u0438\u043c, \u0442.\u043a. \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">replied_message = message.reply_to_message<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u0438 \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0430\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"python\">        if replied_message.text:            logger.info(f\"\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.text} \u0432 {thread_id}\")        else:            logger.info(f\"\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.content_type} \u0432 {thread_id}\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0435\u0442 \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"python\">bot.forward_message(chat_id=MAIN,        from_chat_id=message.chat.id,        message_id=message.reply_to_message.message_id,        message_thread_id=thread_id)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0438 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"python\">logger.info(\"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u043d\u043e\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a, \u043e\u0431\u0435\u0440\u043d\u0435\u043c \u044d\u0442\u043e \u0432 <em>try\/except<\/em> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"python\">def forward_to_thread(message, thread_id):    replied_message = message.reply_to_message    try:        if replied_message.text:            logger.info(f\"\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.text} \u0432 {thread_id}\")        else:            logger.info(f\"\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.content_type} \u0432 {thread_id}\")        bot.forward_message(chat_id=MAIN,                from_chat_id=message.chat.id,                message_id=message.reply_to_message.message_id,                message_thread_id=thread_id)        logger.info(\"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u043d\u043e\")    except Exception as e:        logger.error(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0435: {e}\", exc_info=True)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0440\u043e\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0445\u044d\u043d\u0434\u043b\u0435\u0440 \u0432 \u043a\u0443\u0447\u0443:<\/p>\n<pre><code class=\"python\">@bot.message_handler(func=lambda message: get_thread_id(message) is not None)def send_message(message):    thread_id = get_thread_id(message)    forward_to_thread(message, thread_id)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0443 \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u043a\u0443 \u0447\u0430\u0442\u0430:<\/p>\n<pre><code class=\"python\">if __name__ == '__main__':    logger.info(\"\u041f\u043e\u0433\u043d\u0430\u043b\u0438\")    bot.infinity_polling()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u044b \u0447\u0443\u0442\u044c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u0440\u043e \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0430 (+ \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c SSH-\u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0434\u043e VPS \u0412\u043d\u043e\u0441\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u0432 \u0444\u0430\u0439\u043b \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438:<\/p>\n<pre><code>HTTP=socks5:\/\/127.0.0.1:1080HTTPS=socks5:\/\/127.0.0.1:1080<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"python\">HTTP = os.getenv('HTTP')HTTPS = os.getenv('HTTPS')<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c apihelper:<\/p>\n<pre><code class=\"python\">apihelper.proxy = {    'http': HTTP,    'https': HTTPS}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u0432\u0441\u0435: apihelper &#8212; \u0442\u0435\u043d\u044c, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import osfrom dotenv import load_dotenvfrom telebot import apihelper, TeleBotfrom logging_config import setup_loggerlogger = setup_logger()load_dotenv()TOKEN = os.getenv('TOKEN')MAIN = int(os.getenv('MAIN'))QUOTES = int(os.getenv('QUOTES'))PLAN = int(os.getenv('PLAN'))RECOMMEND = int(os.getenv('RECOMMEND'))HTTP = os.getenv('HTTP')HTTPS = os.getenv('HTTPS')THREAD_MAP = {    QUOTES: {'#\u0446\u0438\u0442\u0430\u0442'},    PLAN: {'#\u043f\u043b\u0430\u043d'},    RECOMMEND: {'#\u0440\u0435\u0446\u0435\u043f\u0442', '#\u0447\u0438\u0442\u0430\u0442\u044c', '#\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c'},}apihelper.proxy = {    'http': HTTP,    'https': HTTPS}bot = TeleBot(TOKEN)def get_thread_id(message):    if message.reply_to_message is None:        return None    for thread_id, tags in THREAD_MAP.items():        if any(tag in message.text.lower() for tag in tags):            return thread_iddef forward_to_thread(message, thread_id):    replied_message = message.reply_to_message    try:        if replied_message.text:            logger.info(f\"\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.text} \u0432 {thread_id}\")        else:            logger.info(f\"\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.content_type} \u0432 {thread_id}\")        bot.forward_message(chat_id=MAIN,                from_chat_id=message.chat.id,                message_id=message.reply_to_message.message_id,                message_thread_id=thread_id)        logger.info(\"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u043d\u043e\")    except Exception as e:        logger.error(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0435: {e}\", exc_info=True)    @bot.message_handler(func=lambda message: get_thread_id(message) is not None)def send_message(message):    thread_id = get_thread_id(message)    forward_to_thread(message, thread_id)if __name__ == '__main__':    logger.info(\"\u041f\u043e\u0433\u043d\u0430\u043b\u0438\")    bot.infinity_polling()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0432 \u0434\u043e\u043a\u0435\u0440\u0435. \u041e \u0432\u044b\u0431\u043e\u0440\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0434\u0435\u043c\u043e\u043d) \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043d\u0435\u0441\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/p>\n<p>\u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c 3 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>requirements.txt<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>pyTelegramBotAPI==4.18.0python-dotenv==1.0.0equests[socks]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Dockerfile<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"nginx\">FROM python:3.12-slimWORKDIR \/appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY script.py .COPY logging_config.py .CMD [\"python\", \"script.py\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>docker-compose.yml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">version: '3.12'services:  telegram-bot:    build: .    container_name: pizhma-bot    restart: unless-stopped    network_mode: host    env_file:      - .env    volumes:      - .\/logs:\/app\/logs<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f:<\/p>\n<pre><code class=\"powershell\">docker compose up -d --build<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u0442\u0430 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0447\u0430\u0442 \u0438 \u0432\u044b\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<\/div>\n<p>\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\/articles\/1039584\/\">https:\/\/habr.com\/ru\/articles\/1039584\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u0443 \u0432\u0441\u0435\u0445 \u0435\u0441\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 \u0447\u0430\u0442 \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043a\u043e\u043b\u0430\u043c\u0438, \u043d\u043e \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u043c\u0435\u043c\u043e\u0432, \u0444\u043b\u0443\u0434\u0430 \u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0434\u0435\u0432\u0447\u0430\u0447\u0438\u0439 \u0447\u0430\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0446\u0435\u043f\u0442\u044b, \u0440\u0430\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0447\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0442.\u0434. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u044f \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u043b\u0438\u0441\u0442\u0430\u043b\u0430 \u0447\u0430\u0442 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043d\u043e\u0432\u043e\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043a\u0438\u043d\u0443\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u0444\u043e\u0442\u043a\u043e\u0439 \u0441 \u043a\u043e\u0442\u0438\u043a\u043e\u043c \u0438 \u0433\u043e\u0440\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b, \u0442\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u0440\u0438\u0448\u043b\u0430 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u0435\u043c\u0443.\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:\u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0434\u043b\u044f \u043a\u043e\u0434\u0430VPS \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442.\u043a. \u0432 \u043d\u044b\u043d\u0435\u0448\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0431\u0435\u0434\u0430 \u0441 \u0442\u0435\u043b\u0435\u0433\u043e\u0439\u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0431\u043e\u0442 (\u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e Raspberry Pi)\u043f\u0435\u0440\u0444\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0437\u043c, \u043e\u043d\u043e \u0436\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c &#8212; \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0445\u0435\u0448\u0442\u0435\u0433\u043e\u0432. \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:#\u0446\u0438\u0442\u0430\u0442\u044b &#8212; \u0441\u043c\u0435\u0448\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u0444\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u043e\u0432#\u0440\u0435\u0446\u0435\u043f\u0442 &#8212; \u0432\u0430\u0436\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b, \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0435\u043c \u043a\u043e\u0440\u043c\u0438\u0442\u044c \u043c\u0443\u0436\u0430, \u043a\u0440\u043e\u043c\u0435 \u043c\u0430\u043a\u0430\u0440\u043e\u0448\u0435\u043a \u0441 \u043a\u043e\u0442\u043b\u0435\u0442\u043a\u043e\u0439#\u043f\u043b\u0430\u043d &#8212; \u043c\u044b \u0436\u0438\u0432\u0435\u043c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u043e\u0440\u043e\u0434\u0430\u0445 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0435 \u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u043f\u043b\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0443\u0441\u043f\u0435\u0442\u044c \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u0432 \u0442\u0435\u0433\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f\/\u0437\u0430\u0431\u044b\u0442\u044c\/\u0437\u0430\u0431\u0438\u0442\u044c\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0442\u0435\u043c\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0445 ID \u0432 \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 .env. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 ID \u0442\u0435\u043c\u044b, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u0435\u043c\u0443, \u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043b\u044d\u0448\u0430 \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 ID \u0441\u0430\u043c\u043e\u0433\u043e \u0447\u0430\u0442\u0430, \u0431\u0435\u0440\u0435\u043c \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435 \/c\/ \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c -100\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437  @BotFather: \u043f\u0438\u0448\u0435\u043c \/start, \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \/newbot, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u043c\u0443 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0431\u043e\u0442\u0430 \u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0435\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#8212; \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043d\u043e \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442\u043e, \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0447\u0438\u0442\u0430\u043b\u0430, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u043e\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0432\u043e \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u0430\u0448 \u0431\u043e\u0442. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0440\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u043c\u0430.\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u201c\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u043c\u0438\u0440\u0443\u201d \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430.\u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d telebot \u0438 \u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 TeleBot \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0443\u0448\u0438 (\u043e\u0431\u044a\u0435\u043a\u0442\u0430) \u0438 \u0441\u0430\u0431\u043c\u043e\u0434\u0443\u043b\u044c apihelper \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:from telebot import apihelper, TeleBot\u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 dotenv \u0441 load_dotenv \u0438 os \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e &#8212; \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0442\u043e\u043d:import osfrom dotenv import load_dotenvload_dotenv()\u041f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:TOKEN = os.getenv(&#8216;TOKEN&#8217;)MAIN = int(os.getenv(&#8216;MAIN&#8217;))QUOTES = int(os.getenv(&#8216;QUOTES&#8217;))PLAN = int(os.getenv(&#8216;PLAN&#8217;))RECOMMEND = int(os.getenv(&#8216;RECOMMEND&#8217;))\u0421\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f:THREAD_MAP = {QUOTES: {&#8216;#\u0446\u0438\u0442\u0430\u0442&#8217;}, #\u043a\u0442\u043e-\u0442\u043e \u043f\u0438\u0448\u0435\u0442 &#171;\u0446\u0438\u0442\u0430\u0442\u0430&#187;, \u043a\u0442\u043e-\u0442\u043e &#8212; &#171;\u0446\u0438\u0442\u0430\u0442\u044b&#187;, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u0441\u043b\u043e\u0432\u0430    PLAN: {&#8216;#\u043f\u043b\u0430\u043d&#8217;},    RECOMMEND: {&#8216;#\u0440\u0435\u0446\u0435\u043f\u0442&#8217;, &#8216;#\u0447\u0438\u0442\u0430\u0442\u044c&#8217;, &#8216;#\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c&#8217;}, #\u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0442\u0435\u043c\u0443}\u0413\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0442.\u043a. \u043e\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u043c\u0430\u043b\u043e \u043b\u0438, \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0443\u0448\u0443:bot = TeleBot(TOKEN)\u0418 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e: \u0443 \u043d\u0430\u0441 \u0432 \u0447\u0430\u0442\u0435 \u0434\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0442\u0435\u0433\u043e\u043c. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 @bot.message_handler \u0441 \u043b\u044f\u043c\u0431\u0434\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:@bot.message_handler(func=lambda message: message.reply_to_message is not None and &#8216;#\u0446\u0438\u0442\u0430\u0442&#8217; in message.text.lower())\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0437\u0434\u0435\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 @bot.message_handler  &#8212; \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044ffunc=lambda message &#8212; \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439message.reply_to_message is not None &#8212; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u043d\u0430 \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u2018#\u0446\u0438\u0442\u0430\u0442\u2019 in message.text.lower() &#8212; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0432\u0435\u0442, \u0430 \u043d\u0430\u0448\u0430 \u043c\u0435\u0442\u043a\u0430, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u043a \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043b\u0438\u0448\u043d\u044e\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0442\u0435\u0433\u043e\u0432\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u0430 \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438:def reply_message_quotes(message):    bot.forward_message(chat_id=MAIN,            from_chat_id=message.chat.id,            message_id=message.reply_to_message.message_id,            message_thread_id=QUOTES)bot.forward_message &#8212; \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 chat_id=MAIN &#8212; ID \u0433\u0440\u0443\u043f\u043f\u044b, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 from_chat_id=message.chat.id &#8212; ID, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c message_id=message.reply_to_message.message_id &#8212;  ID \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0442\u0435\u0433\u043e\u043c (message.reply_to_message), \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 message_id \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e\u0431 id \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0432\u0435\u0441\u0438\u043b\u0438 \u0442\u0435\u0433)message_thread_id=QUOTES &#8212; ID \u0442\u0435\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u041d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 3 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u0435\u0433\u043e\u0432, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c 3 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e WET &#8212; \u043f\u043b\u043e\u0445\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:\u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0445\u044d\u043d\u0434\u043b\u0435\u0440\u0430 + \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ID \u0442\u0435\u043c\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ID, \u0442.\u043a. \u0444\u0438\u043b\u044c\u0442\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f ID. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u043c:if message.reply_to_message is None:    return None\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c ID \u0442\u0435\u043c\u044b, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043b\u043e\u0432\u0430\u0440\u044e, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u0433\u0430, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 ID. \u0422.\u043a. \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 any, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 True, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:for thread_id, tags in THREAD_MAP.items():    if any(tag in message.text.lower() for tag in tags):        return thread_id\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:def get_thread_id(message):    if message.reply_to_message is None:        return None    for thread_id, tags in THREAD_MAP.items():        if any(tag in message.text.lower() for tag in tags):            return thread_id\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438, \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f reply_message_quotes(message), \u043d\u043e \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c thread_id, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 get_thread_id(message). \u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u044e\u0434\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 + \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u044e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 logging_config.py, \u043a\u043e\u043c\u0443-\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c, \u043d\u043e \u044f \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0431\u043e\u0442\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u043d\u043e\u0448\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u0443\u044e \u043c\u043d\u0435 \u0447\u0430\u0441\u0442\u044c:import loggingdef setup_logger():    logging.basicConfig(        level=logging.INFO,        format=&#8217;%(asctime)s &#8212; %(levelname)s &#8212; %(message)s&#8217;,        datefmt=&#8217;%Y-%m-%d %H:%M:%S&#8217;    )    return logging.getLogger(__name__)\u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b:from logging_config import setup_loggerlogger = setup_logger()\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438. message.reply_to_message &#8212; \u0443\u043a\u043e\u0440\u043e\u0442\u0438\u043c, \u0442.\u043a. \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:replied_message = message.reply_to_message\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u0438 \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0430\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f:        if replied_message.text:            logger.info(f&#187;\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.text} \u0432 {thread_id}&#187;)        else:            logger.info(f&#187;\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.content_type} \u0432 {thread_id}&#187;)\u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0435\u0442 \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f:bot.forward_message(chat_id=MAIN,        from_chat_id=message.chat.id,        message_id=message.reply_to_message.message_id,        message_thread_id=thread_id)\u0438 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c:logger.info(&#171;\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u043d\u043e&#187;)\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a, \u043e\u0431\u0435\u0440\u043d\u0435\u043c \u044d\u0442\u043e \u0432 try\/except \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e:def forward_to_thread(message, thread_id):    replied_message = message.reply_to_message    try:        if replied_message.text:            logger.info(f&#187;\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.text} \u0432 {thread_id}&#187;)        else:            logger.info(f&#187;\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c {replied_message.content_type} \u0432 {thread_id}&#187;)        bot.forward_message(chat_id=MAIN,                from_chat_id=message.chat.id,                message_id=message.reply_to_message.message_id,                message_thread_id=thread_id)        logger.info(&#171;\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u043d\u043e&#187;)    except Exception as e:        logger.error(f&#187;\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0435: {e}&#187;, exc_info=True)\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0440\u043e\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0445\u044d\u043d\u0434\u043b\u0435\u0440 \u0432 \u043a\u0443\u0447\u0443:@bot.message_handler(func=lambda message: get_thread_id(message) is not None)def send_message(message):    thread_id = get_thread_id(message)    forward_to_thread(message, thread_id)\u041d\u0443 \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u043a\u0443 \u0447\u0430\u0442\u0430:if __name__ == &#8216;__main__&#8217;:    logger.info(&#171;\u041f\u043e\u0433\u043d\u0430\u043b\u0438&#187;)    bot.infinity_polling()\u041c\u044b \u0447\u0443\u0442\u044c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u0440\u043e \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0430 (+ \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c SSH-\u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0434\u043e VPS \u0412\u043d\u043e\u0441\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u0432 \u0444\u0430\u0439\u043b \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438:HTTP=socks5:\/\/127.0.0.1:1080HTTPS=socks5:\/\/127.0.0.1:1080\u041f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b:HTTP = os.getenv(&#8216;HTTP&#8217;)HTTPS = os.getenv(&#8216;HTTPS&#8217;)\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c apihelper:apihelper.proxy = {    &#8216;http&#8217;: HTTP,    &#8216;https&#8217;: HTTPS}\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u0432\u0441\u0435: apihelper &#8212; \u0442\u0435\u043d\u044c, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e.\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043aimport osfrom dotenv import load_dotenvfrom telebot import apihelper, TeleBotfrom logging_config import setup_loggerlogger = setup_logger()load_dotenv()TOKEN = os.getenv(&#8216;TOKEN&#8217;)MAIN = int(os.getenv(&#8216;MAIN&#8217;))QUOTES = int(os.getenv(&#8216;QUOTES&#8217;))PLAN = int(os.getenv(&#8216;PLAN&#8217;))RECOMMEND = int(os.getenv(&#8216;RECOMMEND&#8217;))HTTP = os.getenv(&#8216;HTTP&#8217;)HTTPS = os.getenv(&#8216;HTTPS&#8217;)THREAD_MAP = {    QUOTES: {&#8216;#\u0446\u0438\u0442\u0430\u0442&#8217;},    PLAN: {&#8216;#\u043f\u043b\u0430\u043d&#8217;},    RECOMMEND: {&#8216;#\u0440\u0435\u0446\u0435\u043f\u0442&#8217;, &#8216;#\u0447\u0438\u0442\u0430\u0442\u044c&#8217;, &#8216;#\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c&#8217;},}apihelper.proxy = {    &#8216;http&#8217;: HTTP,    &#8216;https&#8217;: HTTPS}bot = TeleBot(TOKEN)def get_thread_id(message):    if message.reply_to_message is None:        return None    for thread_id, tags in THREAD_MAP.items():        if any(tag in message.text.lower() for tag in tags):            return thread_iddef forward_to_thread(message, thread_id):    replied_message = message.reply_to_message    try:        if replied_message.text:            logger.info(f&#187;\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-481087","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481087","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=481087"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481087\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=481087"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=481087"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=481087"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}