From b2ead01f15887180d68966b47697c68e6103f06e Mon Sep 17 00:00:00 2001 From: gitadmin Date: Sun, 11 Jan 2026 18:26:13 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=92=D0=9E=D0=9B=D0=9A]=20=D0=BE=D1=82=D0=BB?= =?UTF-8?q?=D0=B0=D0=B4=D0=BE=D1=87=D0=BD=D1=8B=D0=B5=20=D0=B2=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=D1=8B=20=D0=B1=D0=BE=D1=82=D0=B0=20=D0=B2=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tg_mainbot.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tg_mainbot.py b/tg_mainbot.py index 8d4f606..a615077 100644 --- a/tg_mainbot.py +++ b/tg_mainbot.py @@ -66,6 +66,7 @@ logger.info(f"Режим работы бота: {BOT_MODE}") def get_welcome_text(): """Возвращает приветственный текст в зависимости от режима""" + logger.info(f"starting get_welcome_text") if BOT_MODE == 'VOLK': return ( "🌟 Привет! 🌟\n\n" @@ -83,6 +84,7 @@ def get_welcome_text(): def get_help_text(): """Возвращает текст справки в зависимости от режима""" + logger.info(f"starting get_help_text") if BOT_MODE == 'VOLK': return ( "ℹ️ Подсказка информ-бота ВОЛКа\n\n" @@ -119,6 +121,7 @@ if WEBHOOK_URL: except Exception as e: logger.error(f"Ошибка парсинга WEBHOOK_URL: {e}") WEBHOOK_PATH = '/zil_bot' + logger.info(f"Форсирован путь вебхука: {WEBHOOK_PATH}") else: WEBHOOK_PATH = '/zil_bot' logger.warning("WEBHOOK_URL не задан, используем путь по умолчанию") @@ -150,6 +153,7 @@ bot = telebot.TeleBot(RESPONDER_BOT_TOKEN) def get_user_name(user): """Форматирует имя пользователя для записи в БД""" +# logger.info(f"starting get_user_name") if user.username: return f"@{user.username}" else: @@ -218,6 +222,7 @@ def log_event(event_type, user_info, post_id=None, message=None): def create_db_connection(): """Создает подключение к базе данных MariaDB через pymysql""" + logger.info(f"starting create_db_connection") try: conn = pymysql.connect( host=MDB_HOST, @@ -237,6 +242,7 @@ def create_db_connection(): def is_user_subscribed(post_id, user_id): """Проверяет, подписан ли пользователь уже на это событие""" + logger.info(f"starting is_user_subscribed") conn = create_db_connection() if conn is None: return False @@ -261,6 +267,7 @@ def is_user_subscribed(post_id, user_id): def is_user_subscribed_evt(event_id, user_id): """Проверяет, подписан ли пользователь уже на это событие (таблица events)""" + logger.info(f"starting is_user_subscribed_evt") conn = create_db_connection() if conn is None: return False @@ -285,6 +292,7 @@ def is_user_subscribed_evt(event_id, user_id): def get_user_subscriptions(user_id): """Возвращает список событий, на которые подписан пользователь, с shortname""" + logger.info(f"starting get_user_subscriptions") conn = create_db_connection() if conn is None: return [] @@ -312,6 +320,7 @@ def get_user_subscriptions(user_id): def get_user_subscriptions_evt(user_id): """Возвращает список событий, на которые подписан пользователь, с информацией о статусе""" + logger.info(f"starting get_user_subscriptions_evt") conn = create_db_connection() if conn is None: return [] @@ -339,6 +348,7 @@ def get_user_subscriptions_evt(user_id): def get_linked_events_for_post(post_id): """Возвращает список опубликованных мероприятий, связанных с анонсом через таблицу interlinks""" + logger.info(f"starting get_linked_events_for_post") conn = create_db_connection() if conn is None: return [] @@ -367,6 +377,7 @@ def get_linked_events_for_post(post_id): def save_mark_to_db(post_id, user_id, user_name): """Сохраняет отметку пользователя в базе данных""" + logger.info(f"starting save_mark_to_db") conn = create_db_connection() if conn is None: return False @@ -404,6 +415,7 @@ def save_mark_to_db(post_id, user_id, user_name): def save_mark_to_db_evt(event_id, user_id, user_name): """Сохраняет отметку пользователя в базе данных для событий (таблица marks_evt)""" + logger.info(f"starting save_mark_to_db_evt") conn = create_db_connection() if conn is None: return False @@ -439,6 +451,7 @@ def save_mark_to_db_evt(event_id, user_id, user_name): def remove_mark_from_db(post_id, user_id, user_name): """Удаляет отметку пользователя из базы данных""" + logger.info(f"starting remove_mark_from_db") conn = create_db_connection() if conn is None: return False @@ -475,6 +488,7 @@ def remove_mark_from_db(post_id, user_id, user_name): def remove_mark_from_db_evt(event_id, user_id, user_name): """Удаляет отметку пользователя из базы данных для событий (таблица marks_evt)""" + logger.info(f"starting remove_mark_from_db_evt") conn = create_db_connection() if conn is None: return False @@ -510,6 +524,7 @@ def remove_mark_from_db_evt(event_id, user_id, user_name): def format_channel_link(post_id=None): """Форматирует ссылку на событие в канале или на сам канал""" + logger.info(f"starting format_channel_link") if not CHANNEL_ID: return "" @@ -530,6 +545,7 @@ def format_channel_link(post_id=None): def create_help_keyboard(): """Создает клавиатуру для справки""" + logger.info(f"starting create_help_keyboard") keyboard = InlineKeyboardMarkup() keyboard.row( InlineKeyboardButton("📜 Подписки", callback_data="cmd_list"), @@ -539,6 +555,7 @@ def create_help_keyboard(): def create_main_keyboard(): """Создает основную клавиатуру для /start без параметров""" + logger.info(f"starting create_main_keyboard") keyboard = InlineKeyboardMarkup() keyboard.row( InlineKeyboardButton("❓ Справка", callback_data="cmd_help"), @@ -548,6 +565,7 @@ def create_main_keyboard(): def create_manage_keyboard(post_id, is_subscribed): """Создает клавиатуру для управления подпиской на посты""" + logger.info(f"starting create_manage_keyboard") keyboard = InlineKeyboardMarkup() channel_link = format_channel_link(post_id) @@ -567,6 +585,7 @@ def create_manage_keyboard(post_id, is_subscribed): def create_manage_keyboard_evt(event_id, is_subscribed): """Создает клавиатуру для управления подпиской на события""" + logger.info(f"starting create_manage_keyboard_evt") keyboard = InlineKeyboardMarkup() channel_link = format_channel_link(event_id) @@ -587,6 +606,7 @@ def create_manage_keyboard_evt(event_id, is_subscribed): def get_post_data(tg_message_id): """Получает данные о событии по его tg_message_id""" + logger.info(f"starting get_post_data") conn = create_db_connection() if conn is None: return None @@ -619,6 +639,7 @@ def get_post_data(tg_message_id): def get_event_data(tg_message_id): """Получает данные о событии из таблица events по его tg_message_id""" + logger.info(f"starting get_event_data") conn = create_db_connection() if conn is None: return None @@ -645,6 +666,7 @@ def get_event_data(tg_message_id): def format_post_message(tg_message_id): """Форматирует сообщение о событии с помощью модуля formatter""" + logger.info(f"starting format_post_message") post_data = get_post_data(tg_message_id) if not post_data: error_msg = f"Событие с tg_message_id={tg_message_id} не найдено в базе." @@ -710,6 +732,7 @@ def format_post_message(tg_message_id): def format_event_message(tg_message_id): """Форматирует сообщение о событии из таблицы events""" + logger.info(f"starting format_event_message") event_data = get_event_data(tg_message_id) if not event_data: error_msg = f"Событие с tg_message_id={tg_message_id} не найдено в базе events." @@ -758,6 +781,7 @@ def format_event_message(tg_message_id): def download_image(image_url): """Загружает изображение по URL""" + logger.info(f"starting download_image") try: response = requests.get(image_url, timeout=10) response.raise_for_status() @@ -768,6 +792,7 @@ def download_image(image_url): def send_post_message(chat_id, text, image_url=None, reply_markup=None): """Отправляет сообщение с изображением или текстом""" + logger.info(f"starting send_post_message") try: # Дополнительная обрезка текста if len(text) > UNIFIED_MAX_LENGTH: @@ -803,6 +828,7 @@ def send_post_message(chat_id, text, image_url=None, reply_markup=None): def send_direct_message(user_id, message_text): """Отправляет сообщение пользователю по ID с обработкой ошибок""" + logger.info(f"starting send_direct_message") try: # Проверяем, что сообщение не пустое if not message_text or not message_text.strip(): @@ -848,6 +874,7 @@ def send_direct_message(user_id, message_text): def send_management_message(chat_id, post_id, user_id, user_name): """Отправляет сообщение для управления подпиской на посты""" + logger.info(f"starting send_management_message") try: # Проверяем статус подписки is_subscribed = is_user_subscribed(post_id, user_id) @@ -873,6 +900,7 @@ def send_management_message(chat_id, post_id, user_id, user_name): def send_management_message_evt(chat_id, event_id, user_id, user_name): """Отправляет сообщение для управления подпиской на события""" + logger.info(f"starting send_management_message_evt") try: # Проверяем статус подписки is_subscribed = is_user_subscribed_evt(event_id, user_id) @@ -899,6 +927,7 @@ def send_management_message_evt(chat_id, event_id, user_id, user_name): @bot.message_handler(commands=['start']) def handle_start(message): """Обработчик команды /start с параметром""" + logger.info(f"starting handle_start") try: # Извлекаем аргументы из команды /start args = message.text.split() @@ -938,6 +967,7 @@ def handle_start(message): @bot.message_handler(commands=['home']) def handle_home(message): """Обработчик команды /home - переход в основной канал""" + logger.info(f"starting handle_home") try: channel_link = format_channel_link() channel_name = "ВОЛКа" if BOT_MODE == 'VOLK' else "Зиланткона" @@ -958,6 +988,7 @@ def handle_home(message): @bot.message_handler(commands=['help']) def handle_help(message): """Обработчик команды /help""" + logger.info(f"starting handle_help") try: help_text = get_help_text() @@ -976,6 +1007,7 @@ def handle_help(message): @bot.message_handler(commands=['list']) def handle_list(message): """Обработчик команды /list""" + logger.info(f"starting handle_list") try: user_id = message.from_user.id user_name = get_user_name(message.from_user) @@ -1062,6 +1094,7 @@ def handle_list(message): @bot.callback_query_handler(func=lambda call: True) def handle_callback(call): """Обработчик нажатий на кнопки""" + logger.info(f"starting handle_callback") try: # Обработка командных кнопок if call.data.startswith("cmd_"): @@ -1295,6 +1328,7 @@ def handle_callback(call): def setup_webhook(): """Настройка вебхука""" + logger.info(f"starting setup_webhook") try: # Удаляем предыдущий вебхук bot.remove_webhook() @@ -1322,6 +1356,7 @@ def setup_webhook(): # Используем путь из WEBHOOK_URL @app.route(WEBHOOK_PATH, methods=['POST']) def webhook(): + logger.info(f"starting webhook") if request.headers.get('X-Telegram-Bot-Api-Secret-Token') != WEBHOOK_SECRET: logger.warning("Неверный секретный токен!") log_event("security", "system", message="Попытка доступа с неверным секретным токеном") @@ -1342,6 +1377,7 @@ def webhook(): @app.route(f'{WEBHOOK_PATH}/send_message', methods=['POST']) def send_message_api(): """API endpoint для отправки сообщений через бота""" + logger.info(f"starting send_message_api") # Проверяем секретный токен для защиты API api_token = request.headers.get('X-API-Secret-Token') if api_token != WEBHOOK_SECRET: @@ -1386,12 +1422,14 @@ def send_message_api(): if __name__ == '__main__': # Логируем запуск бота + logger.info(f"starting main") log_event("system", "system", message="Бот запущен") # Настраиваем вебхук setup_webhook() # Логируем запуск Flask + logger.info(f"starting Flask") log_event("system", "system", message=f"Flask приложение запущено на порту {WEBHOOK_PORT}, путь: {WEBHOOK_PATH}") # Запускаем Flask приложение