{"id":319095,"date":"2021-03-05T09:01:07","date_gmt":"2021-03-05T09:01:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=319095"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=319095","title":{"rendered":"\u0427\u0438\u0442\u0430\u0435\u043c telegram-\u043a\u0430\u043d\u0430\u043b\u044b \u0432 \u0432\u0438\u0434\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f, \u0441 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435\u043c"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0422\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 (<a href=\"https:\/\/habr.com\/ru\/post\/544414\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/544414\/<\/a>) \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043f\u043e \u043d\u044e\u0430\u043d\u0441\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u041d\u043e \u043d\u0435\u0434\u043e\u043b\u0433\u043e \u044f \u0440\u0430\u0434\u043e\u0432\u0430\u043b\u0441\u044f: \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0448\u0435\u043b \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u043e\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u043e\u0442\u043e\u043a \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u043b\u0438\u0431\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b.<\/p>\n<p>\u042f \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u043d\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443, \u0441\u0431\u043e\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u043e\u0442\u0430 (\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u044f \u0443\u0437\u043d\u0430\u043b \u0438\u0437 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/543676\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/543676\/<\/a>), \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>\u041f\u0443\u0442\u0435\u043c \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u043b\u043e\u0433\u043e\u0432 \u0438 \u0440\u0430\u0437\u0434\u0443\u043c\u0438\u0439 \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u044e\u0437\u0435\u0440\u0431\u043e\u0442 (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u043e \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0432\u044b\u0448\u0435, \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0431\u043e\u0442\u0430) \u0443\u043f\u0451\u0440\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 (500 \u043d\u0430 \u0430\u043a\u043a\u0430\u0443\u043d\u0442, \u0441\u043f\u0430\u0441\u0438\u0431\u043e <a class=\"mention\" href=\"\/users\/slavenin999\">@Slavenin999<\/a> \u0437\u0430 \u043d\u0430\u0432\u043e\u0434\u043a\u0443). \u042f \u043d\u0435 \u0443\u0442\u043e\u0447\u043d\u044f\u043b, \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0438\u043b\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445, \u0434\u0430 \u044d\u0442\u043e \u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e. \u042e\u0437\u0435\u0440 \u0431\u043e\u0442 \u0443\u043f\u0451\u0440\u0441\u044f \u0432 \u043d\u0438\u0445 \u0437\u0430 \u0434\u0435\u043d\u044c.<\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u0432 \u043f\u043b\u0430\u043d\u0430\u0445 \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u043e\u0434 \u0422\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f, \u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c, \u044f \u0445\u043e\u0442\u0435\u043b \u0435\u0433\u043e \u0445\u043e\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u0434\u043e\u0431\u0430\u044e\u0449\u0438\u0439 \u0432\u0438\u0434. \u041e\u0434\u043d\u0430\u043a\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 \u043b\u0438\u043c\u0438\u0442\u043e\u043c, \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u0434\u043e\u043b\u0433\u0438\u0439 \u044f\u0449\u0438\u043a, \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0435\u0433\u043e \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 (<a href=\"https:\/\/github.com\/parotikov\/telegregator\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/parotikov\/telegregator<\/a>), \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0441\u043c\u043e\u0433 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u043d\u0435 \u0436\u0434\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441 \u043e\u0431\u0445\u043e\u0434\u043e\u043c \u043b\u0438\u043c\u0438\u0442\u043e\u0432, \u0442.\u043a. \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f.. <\/p>\n<p>\u0421\u0430\u043c\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0440\u0435\u043f\u0435 \u0441 \u0431\u043e\u0442\u043e\u043c. \u0412 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<p><em>inb4: \u043f\u0438\u043d\u0430\u0442\u044c \u0437\u0430 \u043a\u043e\u0434 \u043d\u0435 \u043d\u0430\u0434\u043e, \u043f\u0438\u0442\u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e. \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0435\u043b.<\/em><\/p>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u043e<\/h2>\n<pre><code class=\"python\">from telethon import TelegramClient, events, sync, functions, types, utils from telethon.tl.custom import Button import asyncio import os import logging from TelegramCommand import * from database import * import importlib from dotenv import load_dotenv load_dotenv()  logger = logging.getLogger(\"tggt\") logger.setLevel(logging.DEBUG)  fh = logging.FileHandler(\"app.log\") formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) logger.addHandler(fh)  api_id = os.getenv(\"API_ID\") api_hash = os.getenv(\"API_HASH\") master_account = os.getenv(\"MASTER_ACCOUNT\") bot_token = os.getenv(\"BOT_TOKEN\")  client = TelegramClient('telegregator_session', api_id, api_hash)  <\/code><\/pre>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e \u043b\u043e\u0433\u0433\u0435\u0440, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e telethon&#8217;\u0430. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043b\u0435\u0433\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>client <\/code>\u0438 \u0435\u0433\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>\u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0422\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b: \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 \u0438 \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u0431\u043e\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0447\u0430\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438 \u0442.\u0434.).<\/p>\n<h2>\u041a\u043e\u043c\u0430\u043d\u0434\u044b<\/h2>\n<p>\u041d\u0430 \u0432\u0441\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u043e\u0442 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 <code><a class=\"mention\" href=\"\/users\/client.on(events.newmessage):\">@client.on(events.NewMessage):<\/a><\/code><\/p>\n<pre><code class=\"python\">@client.on(events.NewMessage)     async def my_event_handler(event):         logger.info(\"\\r\\n\\r\\n\\r\\n-------------\u041d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435----------------\")          ## \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u0442\u043e \u043a \u043d\u0430\u043c \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0441\u044f         if event.message.from_id:             contact = await add_contact(event.message.from_id)          # \u043b\u0438\u0447\u043a\u0430 \u0431\u043e\u0442\u0430         management = 0         handled = 0          if hasattr(event.message.to_id, 'channel_id'):             handled = 1             # logger.info('\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u043a\u0430\u043d\u0430\u043b (\u0442\u0438\u043f channel_id), \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438')              try:                 chat = await client.get_input_entity(event.message.to_id)             except Exception as e:                 logger.error(e)          if hasattr(event.message.to_id, 'user_id'):             if event.message.to_id.user_id == 887053090 or event.message.to_id.user_id == None:                 logger.info(\"\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043b\u0438\u0447\u043a\u0443 \u0442\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443\")                 management = 1                 try:                     chat = await client.get_input_entity(event.message.from_id)                     await client.send_read_acknowledge(chat, event.message)                 except Exception as e:                     logger.error(e)             else:                 try:                     chat = await client.get_input_entity(event.message.to_id)                 except Exception as e:                     logger.error(e)         if hasattr(event.message.to_id, 'chat_id'):             logger.info('\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 (chat_id) %s, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0443' % event.message.to_id.chat_id)             try:                 chat = await client.get_input_entity(event.message.to_id)             except Exception as e:                 logger.error(e)          if hasattr(event.message.to_id, 'channel_id'):             logger.info('\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u043d\u0430\u043b (channel_id) %s, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0443' % event.message.to_id.channel_id)              try:                 chat = await client.get_input_entity(event.message.to_id)             except Exception as e:                 logger.error(e)              # \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0430\u0434\u043c\u0438\u043d\u0443             await event.message.forward_to(master_account)          # mark message as read         await client.send_read_acknowledge(chat, event.message)          #\u041f\u0430\u0440\u0441\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443.          command_handler = TelegramCommand()         command, command_arg = command_handler.parseMessage(event.message.message)         # \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430         if command:             # \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c             await send_read(event.message.from_id, event.message)              chat_command = command             logger.info('\u041a\u043e\u043c\u0430\u043d\u0434\u0430: {}, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442: {}'.format(chat_command, command_arg))              # \u043d\u0430 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u043d\u0430\u043b\u0443             if chat_command == 'help':                 await call_command(module='helpmessage', answer_to=chat)             if chat_command == 'new':                 await call_command(module='new', answer_to=chat, contact=contact, group_name = command_arg)             if chat_command == 'test':                 await call_command(module='test')             if chat_command in ['join', 'add']:                 channels_list = command_arg.split(' ')                 for channel in channels_list:                     await call_command(module='join', answer_to=chat, channel_name=channel)             # \u043d\u0430 \u043e\u0442\u043f\u0438\u0441\u043a\u0443 \u043e\u0442 \u043a\u0430\u043d\u0430\u043b\u0430             if chat_command in ['leave', 'remove', 'delete']:                 channels_list = command_arg.split(' ')                 for channel in channels_list:                     await call_command(module='leave', answer_to=chat, channel_name=channel)             # \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432             if chat_command == 'list':                 await call_command(module='listchannels', answer_to=chat, feed_id=event.message.to_id.chat_id)             ## \u0412\u043a\u043b\/\u0432\u044b\u043a\u043b \u043f\u043e\u0442\u043e\u043a             if chat_command in ['stop', 'pause']:                 await call_command(module='stop', answer_to=chat)             if chat_command in ['start', 'resume']:                 await call_command(module='start', answer_to=chat)             if chat_command in ['deleteall', 'exit']:                 await call_command(module='deleteall', answer_to=chat)             ## \u0424\u0438\u043b\u044c\u0442\u0440\u044b \u0438 \u0441\u0442\u043e\u043f \u0441\u043b\u043e\u0432\u0430             if chat_command == 'filter':                 await call_command(module='filter', answer_to=chat, word = command_arg, contact_id = contact.contact_id)             if chat_command == 'filterremove' or chat_command == 'removefilter' or chat_command == 'unfilter':                 await call_command(module='unfilter', answer_to=chat, word = command_arg, contact_id = contact.contact_id)             if chat_command == 'filterlist':                 await call_command(module='filterlist', answer_to=chat, contact_id = contact.contact_id)             if chat_command == 'filterclear' or chat_command == 'clearfilter':                 await call_command(module='filterclear', answer_to=chat, contact_id = contact.contact_id)             if chat_command == 'filterstop' or chat_command == 'stopfilter':                 await call_command(module='filterstop', answer_to=chat)             if chat_command == 'filterstart' or chat_command == 'sartfilter':                 await call_command(module='filterstart', answer_to=chat)             if chat_command == 'message':                 await call_command(module='message', message=command_arg)<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 <code>event.message<\/code>. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0432 \u043b\u0438\u0447\u043a\u0443, \u0432 \u043a\u0430\u043d\u0430\u043b \u0438\u043b\u0438 \u0432 \u0447\u0430\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438., \u0418, \u0447\u0435\u0440\u0435\u0437 \u043a\u0443\u0447\u0443 if\u043e\u0432, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439. \u041e\u043d\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043d\u0430 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433, \u043d\u0430\u0434\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0412\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \/join, \/filter \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c.<\/p>\n<h2>\u041a\u0430\u043a \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b<\/h2>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 <code><a class=\"mention\" href=\"\/users\/client.on(events.newmessage)\">@client.on(events.NewMessage)<\/a><\/code>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u0438 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 (<code>PeerChat <\/code>\u0438 <code>PeerChannel<\/code>), \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438:<\/p>\n<pre><code class=\"python\">\t\t\t\tif event.message.fwd_from and event.message.fwd_from.channel_id and event.message.to_id.__class__.__name__ == 'PeerChat':             logger.info(\"\u0412\u0438\u0436\u0443 \u0440\u0435\u043f\u043e\u0441\u0442 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443\")             try:                 channelInfo = await client.get_entity(event.message.fwd_from.channel_id)             except Exception as e:                 logger.error(e)                 logger.error(\"\u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c channelInfo \u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430 %s\" % event.message.fwd_from.channel_id)                 channelInfo = None                 await event.reply('\u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0430\u043d\u0430\u043b \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e \u0438\u043d\u0432\u0430\u0439\u0442\u0443')             else:                 channelEntity = await client.get_input_entity(event.message.fwd_from.channel_id)                 logger.info(\"\u0420\u0435\u043f\u043e\u0441\u0442 \u043a\u0430\u043d\u0430\u043b\u0430 {} (@{}), id {}\".format(channelInfo.title, channelInfo.username, channelInfo.id))                 await call_command(module='join', answer_to=chat, channel_name=channelInfo.username)<\/code><\/pre>\n<h2>\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u043f\u043e\u0441\u0442\u043e\u0432 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432 \u043b\u0435\u043d\u0442\u0443<\/h2>\n<p>\u041d\u0443 \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u0442\u043e\u0432 \u0438\u0437 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432 \u043e\u0434\u043d\u0443 \u043b\u0435\u043d\u0442\u0443 (\u043f\u043e\u0442\u043e\u043a):<\/p>\n<pre><code class=\"python\">async def handle_message(event):     try:         logger.info('\u0438\u0449\u0435\u043c \u0432 \u0411\u0414 \u043f\u043e\u0442\u043e\u043a, \u0433\u0434\u0435 channel_id = %s' % event.message.to_id.channel_id)         forwards = Forward.select().where(Forward.channel_id == event.message.to_id.channel_id)     except Forward.DoesNotExist:         logger.info('\u041a\u0430\u043d\u0430\u043b\u0430 \u043d\u0435\u0442 \u0441\u0440\u0435\u0434\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c\u044b\u0445')         forwards = None         return     if not len(forwards):         logger.info('\u043d\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u0430\u043d\u0430\u043b')         return      logger.info(\"\u041d\u0430\u0448\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b channel_id %s\" % event.message.to_id.channel_id)     logger.info(forwards)      chat = await client.get_input_entity(event.message.to_id)     await client.send_read_acknowledge(chat, event.message)      for forward in forwards:         # \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430\u0434\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c         try:             feed = Feed.get(Feed.feed_id == forward.feed_id)         except Feed.DoesNotExist:             logger.info('\u041f\u043e\u0442\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d')             feed = None             return          if not feed.is_enable:             logger.info(\"\u041f\u043e\u0442\u043e\u043a \u0431\u044b\u043b \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d, \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c\")             return         # logger.info('\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u0443\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043d\u0430\u043b, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435')         log_message = '\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u043a\u0430\u043d\u0430\u043b {}'.format(event.message.to_id)         if hasattr(event.message.to_id, 'channel_id'):             feed_id = forward.feed_id             try:                 owner = Contact.select().join(Feed, on=(Contact.contact_id == Feed.contact_id)).where(Feed.feed_id == feed_id).get()             except Contact.DoesNotExist:                 log_message = log_message + ', \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d'                 owner = None             else:                 log_message = log_message + ', id \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043a\u0430\u043d\u0430\u043b\u0430: {}'.format(owner.contact_id)             logger.info(log_message)         else:             logger.error('\u043d\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 event.message.to_id.chat_id')          log_message = '\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c.'         filterlist = []          # TODO \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044e\u0437\u0435\u0440\u0430. \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 438 \u0441\u0442\u0440\u043e\u043a\u0443         try:             filters = Filter.select().where(Filter.contact_id == owner.contact_id)         except filterlist.DoesNotExist:             log_message = log_message + ' \u043d\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432'             filters = []         else:             log_message = log_message + ' \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f \u044e\u0437\u0435\u0440\u0430'             filterlist = [filter.word.lower() for filter in filters]         blacklistword = filterlist + ['\u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u0439', '\u0432\u044b\u0438\u0433\u0440\u0430\u0439', '\u0443\u0434\u0430\u043b\u044e', '\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435', 'joinchat', '\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f', '\u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0441\u044f', '\u043f\u043e\u0434\u043f\u0438\u0448\u0438\u0442\u0435\u0441\u044c', '\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438', '\u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u043d\u0430\u043b', '\u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f', '\u0434\u0430\u043c\u044b \u0438 \u0433\u043e\u0441\u043f\u043e\u0434\u0430', '\u0430\u0432\u0442\u043e\u0440 \u043a\u0430\u043d\u0430\u043b\u0430']         message = event.message         message_text = message.message         if message.entities:             for entity in message.entities:                 if entity.__class__.__name__ == 'MessageEntityTextUrl':                     message_text = message_text + entity.url         if message.reply_markup:             for row in message.reply_markup.rows:                 for button in row.buttons:                     if hasattr(button, 'url'):                         message_text = message_text + button.url                     if hasattr(button, 'text'):                         message_text = message_text + button.text          if any([word in message_text.lower() for word in blacklistword]): # \u0438\u0449\u0435\u043c \u0441\u0442\u043e\u043f \u0441\u043b\u043e\u0432\u0430 \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u0445             log_message = log_message + \"\u041d\u0430\u0439\u0434\u0435\u043d\u044b \u0441\u0442\u043e\u043f-\u0441\u043b\u043e\u0432\u0430, \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c\"             logger.info(log_message)             return         logger.info(log_message)         logger.info(\"\u0424\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u0440\u043e\u0448\u043b\u0438, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430 %s \u0432 \u043f\u043e\u0442\u043e\u043a %s\" % (forward.channel_id, forward.feed_id))         await event.message.forward_to(forward.feed_id) <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u043e id \u043a\u0430\u043d\u0430\u043b\u0430 (<code>event.message.to_id.channel_id<\/code>), \u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u0432 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u0442\u044c, \u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 \u0411\u0414 \u0447\u0435\u0440\u0435\u0437 \u043f\u0438\u0432\u043e\u0442\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>Forward<\/code>.  <code>Forward <\/code>\u044d\u0442\u043e many-to-many \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 <code>Feed <\/code>\u0438 <code>Channel <\/code>(\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0436\u0435). \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u043b\u0438 \u043f\u043e\u0442\u043e\u043a (\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u043f\u043e\u0442\u043e\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0444\u043b\u0443\u0434\u0438\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u044c). <\/p>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0442\u043e\u043f-\u0441\u043b\u043e\u0432\u0430\u043c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>\u041d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u043e\u043f-\u0441\u043b\u043e\u0432 \u0438\u0437 \u043a\u043e\u0434\u0430 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433. \u041a\u0430\u043a \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p>\u041d\u0443 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0434\u0435, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c i18n \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438. \u0427\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u044e\u0437\u0430\u044e\u0442?<\/p>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0411\u0414 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a<\/h2>\n<pre><code class=\"python\">from peewee import * db = SqliteDatabase('telegregator.db')  class BaseModel(Model):     class Meta:         database = db class Contact(BaseModel):     contact_id = IntegerField(unique=True)     added_at = DateTimeField(default=datetime.datetime.now) class Channel(BaseModel):     channel_id = IntegerField(unique=True)     channel_name = CharField(default='')     channel_title = CharField(default='') class Feed(BaseModel):     feed_id = IntegerField(unique=True)     contact = ForeignKeyField(Contact, backref='contacts')     is_filter = BooleanField(default=True)     is_enable = BooleanField(default=True)     feed_title = CharField(default='') class Forward(BaseModel):     feed = ForeignKeyField(Feed, backref='feeds')     channel = ForeignKeyField(Channel, backref='channels') class Filter(BaseModel):     word = CharField(unique=True)     contact = ForeignKeyField(Contact, backref='contacts')<\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0432\u0441\u0451. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c, \u043a\u0430\u043a \u0432\u044b \u0440\u0435\u0448\u0430\u043b\u0438 \u0441\u0445\u043e\u0436\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 (\u043f\u0440\u0438\u0437\u044b\u0432\u0430\u044e <a class=\"mention\" href=\"\/users\/aav\">@aav<\/a> \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u044b)<\/p>\n<p>\u042f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0432\u0435\u0437\u0434\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0433\u0435\u0440\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c. \u0415\u0449\u0435 \u0440\u0430\u0437 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u0435\u043f\u0443: <a href=\"https:\/\/github.com\/parotikov\/telegregator\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/parotikov\/telegregator<\/a><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0442\u0435\u043b\u0435\u0433\u0443 <a class=\"mention\" href=\"\/users\/parotikov.\">@parotikov.<\/a> \u041d\u0443, \u0438, \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 \u0438 API, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u043b\u0438\u043c\u0438\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u044f \ud83d\ude42<\/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\/post\/545580\/\"> https:\/\/habr.com\/ru\/post\/545580\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0422\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 (<a href=\"https:\/\/habr.com\/ru\/post\/544414\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/544414\/<\/a>) \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043f\u043e \u043d\u044e\u0430\u043d\u0441\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u041d\u043e \u043d\u0435\u0434\u043e\u043b\u0433\u043e \u044f \u0440\u0430\u0434\u043e\u0432\u0430\u043b\u0441\u044f: \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0448\u0435\u043b \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u043e\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u043e\u0442\u043e\u043a \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u043b\u0438\u0431\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b.<\/p>\n<p>\u042f \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u043d\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443, \u0441\u0431\u043e\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u043e\u0442\u0430 (\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u044f \u0443\u0437\u043d\u0430\u043b \u0438\u0437 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/543676\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/543676\/<\/a>), \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>\u041f\u0443\u0442\u0435\u043c \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u043b\u043e\u0433\u043e\u0432 \u0438 \u0440\u0430\u0437\u0434\u0443\u043c\u0438\u0439 \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u044e\u0437\u0435\u0440\u0431\u043e\u0442 (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u043e \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0432\u044b\u0448\u0435, \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0431\u043e\u0442\u0430) \u0443\u043f\u0451\u0440\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 (500 \u043d\u0430 \u0430\u043a\u043a\u0430\u0443\u043d\u0442, \u0441\u043f\u0430\u0441\u0438\u0431\u043e <a class=\"mention\" href=\"\/users\/slavenin999\">@Slavenin999<\/a> \u0437\u0430 \u043d\u0430\u0432\u043e\u0434\u043a\u0443). \u042f \u043d\u0435 \u0443\u0442\u043e\u0447\u043d\u044f\u043b, \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0438\u043b\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445, \u0434\u0430 \u044d\u0442\u043e \u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e. \u042e\u0437\u0435\u0440 \u0431\u043e\u0442 \u0443\u043f\u0451\u0440\u0441\u044f \u0432 \u043d\u0438\u0445 \u0437\u0430 \u0434\u0435\u043d\u044c.<\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u0432 \u043f\u043b\u0430\u043d\u0430\u0445 \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u043e\u0434 \u0422\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f, \u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c, \u044f \u0445\u043e\u0442\u0435\u043b \u0435\u0433\u043e \u0445\u043e\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u0434\u043e\u0431\u0430\u044e\u0449\u0438\u0439 \u0432\u0438\u0434. \u041e\u0434\u043d\u0430\u043a\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 \u043b\u0438\u043c\u0438\u0442\u043e\u043c, \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u0434\u043e\u043b\u0433\u0438\u0439 \u044f\u0449\u0438\u043a, \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0435\u0433\u043e \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 (<a href=\"https:\/\/github.com\/parotikov\/telegregator\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/parotikov\/telegregator<\/a>), \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0441\u043c\u043e\u0433 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u043d\u0435 \u0436\u0434\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441 \u043e\u0431\u0445\u043e\u0434\u043e\u043c \u043b\u0438\u043c\u0438\u0442\u043e\u0432, \u0442.\u043a. \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f.. <\/p>\n<p>\u0421\u0430\u043c\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0440\u0435\u043f\u0435 \u0441 \u0431\u043e\u0442\u043e\u043c. \u0412 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<p><em>inb4: \u043f\u0438\u043d\u0430\u0442\u044c \u0437\u0430 \u043a\u043e\u0434 \u043d\u0435 \u043d\u0430\u0434\u043e, \u043f\u0438\u0442\u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e. \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0435\u043b.<\/em><\/p>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u043e<\/h2>\n<pre><code class=\"python\">from telethon import TelegramClient, events, sync, functions, types, utils from telethon.tl.custom import Button import asyncio import os import logging from TelegramCommand import * from database import * import importlib from dotenv import load_dotenv load_dotenv()  logger = logging.getLogger(\"tggt\") logger.setLevel(logging.DEBUG)  fh = logging.FileHandler(\"app.log\") formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) logger.addHandler(fh)  api_id = os.getenv(\"API_ID\") api_hash = os.getenv(\"API_HASH\") master_account = os.getenv(\"MASTER_ACCOUNT\") bot_token = os.getenv(\"BOT_TOKEN\")  client = TelegramClient('telegregator_session', api_id, api_hash)  <\/code><\/pre>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e \u043b\u043e\u0433\u0433\u0435\u0440, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e telethon&#8217;\u0430. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043b\u0435\u0433\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>client <\/code>\u0438 \u0435\u0433\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>\u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0422\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b: \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 \u0438 \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u0431\u043e\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0447\u0430\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438 \u0442.\u0434.).<\/p>\n<h2>\u041a\u043e\u043c\u0430\u043d\u0434\u044b<\/h2>\n<p>\u041d\u0430 \u0432\u0441\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u043e\u0442 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 <code><a class=\"mention\" href=\"\/users\/client.on(events.newmessage):\">@client.on(events.NewMessage):<\/a><\/code><\/p>\n<pre><code class=\"python\">@client.on(events.NewMessage)     async def my_event_handler(event):         logger.info(\"\\r\\n\\r\\n\\r\\n-------------\u041d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435----------------\")          ## \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u0442\u043e \u043a \u043d\u0430\u043c \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0441\u044f         if event.message.from_id:             contact = await add_contact(event.message.from_id)          # \u043b\u0438\u0447\u043a\u0430 \u0431\u043e\u0442\u0430         management = 0         handled = 0          if hasattr(event.message.to_id, 'channel_id'):             handled = 1             # logger.info('\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u043a\u0430\u043d\u0430\u043b (\u0442\u0438\u043f channel_id), \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438')              try:                 chat = await client.get_input_entity(event.message.to_id)             except Exception as e:                 logger.error(e)          if hasattr(event.message.to_id, 'user_id'):             if event.message.to_id.user_id == 887053090 or event.message.to_id.user_id == None:                 logger.info(\"\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043b\u0438\u0447\u043a\u0443 \u0442\u0435\u043b\u0435\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443\")                 management = 1                 try:                     chat = await client.get_input_entity(event.message.from_id)                     await client.send_read_acknowledge(chat, event.message)                 except Exception as e:                     logger.error(e)             else:                 try:                     chat = await client.get_input_entity(event.message.to_id)                 except Exception as e:                     logger.error(e)         if hasattr(event.message.to_id, 'chat_id'):             logger.info('\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 (chat_id) %s, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0443' % event.message.to_id.chat_id)             try:                 chat = await client.get_input_entity(event.message.to_id)             except Exception as e:                 logger.error(e)          if hasattr(event.message.to_id, 'channel_id'):             logger.info('\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u043d\u0430\u043b (channel_id) %s, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0443' % event.message.to_id.channel_id)              try:                 chat = await client.get_input_entity(event.message.to_id)             except Exception as e:                 logger.error(e)              # \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0430\u0434\u043c\u0438\u043d\u0443             await event.message.forward_to(master_account)          # mark message as read         await client.send_read_acknowledge(chat, event.message)          #\u041f\u0430\u0440\u0441\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443.          command_handler = TelegramCommand()         command, command_arg = command_handler.parseMessage(event.message.message)         # \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430         if command:             # \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c             await send_read(event.message.from_id, event.message)              chat_command = command             logger.info('\u041a\u043e\u043c\u0430\u043d\u0434\u0430: {}, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442: {}'.format(chat_command, command_arg))              # \u043d\u0430 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u043d\u0430\u043b\u0443             if chat_command == 'help':                 await call_command(module='helpmessage', answer_to=chat)             if chat_command == 'new':                 await call_command(module='new', answer_to=chat, contact=contact, group_name = command_arg)             if chat_command == 'test':                 await call_command(module='test')             if chat_command in ['join', 'add']:                 channels_list = command_arg.split(' ')                 for channel in channels_list:                     await call_command(module='join', answer_to=chat, channel_name=channel)             # \u043d\u0430 \u043e\u0442\u043f\u0438\u0441\u043a\u0443 \u043e\u0442 \u043a\u0430\u043d\u0430\u043b\u0430             if chat_command in ['leave', 'remove', 'delete']:                 channels_list = command_arg.split(' ')                 for channel in channels_list:                     await call_command(module='leave', answer_to=chat, channel_name=channel)             # \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432             if chat_command == 'list':                 await call_command(module='listchannels', answer_to=chat, feed_id=event.message.to_id.chat_id)             ## \u0412\u043a\u043b\/\u0432\u044b\u043a\u043b \u043f\u043e\u0442\u043e\u043a             if chat_command in ['stop', 'pause']:                 await call_command(module='stop', answer_to=chat)             if chat_command in ['start', 'resume']:                 await call_command(module='start', answer_to=chat)             if chat_command in ['deleteall', 'exit']:                 await call_command(module='deleteall', answer_to=chat)             ## \u0424\u0438\u043b\u044c\u0442\u0440\u044b \u0438 \u0441\u0442\u043e\u043f \u0441\u043b\u043e\u0432\u0430             if chat_command == 'filter':                 await call_command(module='filter', answer_to=chat, word = command_arg, contact_id = contact.contact_id)             if chat_command == 'filterremove' or chat_command == 'removefilter' or chat_command == 'unfilter':                 await call_command(module='unfilter', answer_to=chat, word = command_arg, contact_id = contact.contact_id)             if chat_command == 'filterlist':                 await call_command(module='filterlist', answer_to=chat, contact_id = contact.contact_id)             if chat_command == 'filterclear' or chat_command == 'clearfilter':                 await call_command(module='filterclear', answer_to=chat, contact_id = contact.contact_id)             if chat_command == 'filterstop' or chat_command == 'stopfilter':                 await call_command(module='filterstop', answer_to=chat)             if chat_command == 'filterstart' or chat_command == 'sartfilter':                 await call_command(module='filterstart', answer_to=chat)             if chat_command == 'message':                 await call_command(module='message', message=command_arg)<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 <code>event.message<\/code>. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0432 \u043b\u0438\u0447\u043a\u0443, \u0432 \u043a\u0430\u043d\u0430\u043b \u0438\u043b\u0438 \u0432 \u0447\u0430\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438., \u0418, \u0447\u0435\u0440\u0435\u0437 \u043a\u0443\u0447\u0443 if\u043e\u0432, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439. \u041e\u043d\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043d\u0430 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433, \u043d\u0430\u0434\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0412\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \/join, \/filter \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c.<\/p>\n<h2>\u041a\u0430\u043a \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b<\/h2>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 <code><a class=\"mention\" href=\"\/users\/client.on(events.newmessage)\">@client.on(events.NewMessage)<\/a><\/code>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u0438 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 (<code>PeerChat <\/code>\u0438 <code>PeerChannel<\/code>), \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438:<\/p>\n<pre><code class=\"python\">\t\t\t\tif event.message.fwd_from and event.message.fwd_from.channel_id and event.message.to_id.__class__.__name__ == 'PeerChat':             logger.info(\"\u0412\u0438\u0436\u0443 \u0440\u0435\u043f\u043e\u0441\u0442 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443\")             try:                 channelInfo = await client.get_entity(event.message.fwd_from.channel_id)             except Exception as e:                 logger.error(e)                 logger.error(\"\u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c channelInfo \u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430 %s\" % event.message.fwd_from.channel_id)                 channelInfo = None                 await event.reply('\u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0430\u043d\u0430\u043b \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e \u0438\u043d\u0432\u0430\u0439\u0442\u0443')             else:                 channelEntity = await client.get_input_entity(event.message.fwd_from.channel_id)                 logger.info(\"\u0420\u0435\u043f\u043e\u0441\u0442 \u043a\u0430\u043d\u0430\u043b\u0430 {} (@{}), id {}\".format(channelInfo.title, channelInfo.username, channelInfo.id))                 await call_command(module='join', answer_to=chat, channel_name=channelInfo.username)<\/code><\/pre>\n<h2>\u041f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u043f\u043e\u0441\u0442\u043e\u0432 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432 \u043b\u0435\u043d\u0442\u0443<\/h2>\n<p>\u041d\u0443 \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u0442\u043e\u0432 \u0438\u0437 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432 \u043e\u0434\u043d\u0443 \u043b\u0435\u043d\u0442\u0443 (\u043f\u043e\u0442\u043e\u043a):<\/p>\n<pre><code class=\"python\">async def handle_message(event):     try:         logger.info('\u0438\u0449\u0435\u043c \u0432 \u0411\u0414 \u043f\u043e\u0442\u043e\u043a, <\/code><\/pre>\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-319095","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/319095","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=319095"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/319095\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=319095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=319095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=319095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}