From 7054c5fdd76f978c9bf40fbda50a258e047fe89f Mon Sep 17 00:00:00 2001 From: gitadmin Date: Tue, 14 Oct 2025 17:38:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tg_mainbot.py | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/tg_mainbot.py b/tg_mainbot.py index da6146b..49b37da 100644 --- a/tg_mainbot.py +++ b/tg_mainbot.py @@ -243,7 +243,7 @@ def get_user_subscriptions(user_id): conn.close() def get_user_subscriptions_evt(user_id): - """Возвращает список событий, на которые подписан пользователь, с name""" + """Возвращает список событий, на которые подписан пользователь, с информацией о статусе""" conn = create_db_connection() if conn is None: return [] @@ -251,7 +251,7 @@ def get_user_subscriptions_evt(user_id): try: with conn.cursor() as cursor: sql = """ - SELECT m.tg_event_id, COALESCE(e.name, '') as name + SELECT m.tg_event_id, COALESCE(e.name, '') as name, e.is_posted_tg, e.is_visible FROM marks_evt m LEFT JOIN events e ON m.tg_event_id = e.tg_message_id WHERE m.tg_user_id = %s @@ -260,7 +260,7 @@ def get_user_subscriptions_evt(user_id): cursor.execute(sql, (user_id,)) result = cursor.fetchall() - return [{'event_id': row['tg_event_id'], 'name': row['name']} for row in result] + return [{'event_id': row['tg_event_id'], 'name': row['name'], 'is_posted_tg': row['is_posted_tg'], 'is_visible': row['is_visible']} for row in result] except pymysql.Error as e: error_msg = f"Ошибка при получении подписок на события: {e}" logger.error(error_msg) @@ -270,7 +270,7 @@ def get_user_subscriptions_evt(user_id): conn.close() def get_linked_events_for_post(post_id): - """Возвращает список мероприятий, связанных с анонсом через таблицу interlinks""" + """Возвращает список опубликованных мероприятий, связанных с анонсом через таблицу interlinks""" conn = create_db_connection() if conn is None: return [] @@ -282,7 +282,7 @@ def get_linked_events_for_post(post_id): FROM interlinks i JOIN events e ON i.event_id = e.id JOIN posts p ON i.post_id = p.id - WHERE p.tg_message_id = %s AND e.name IS NOT NULL AND e.name != '' + WHERE p.tg_message_id = %s AND e.name IS NOT NULL AND e.name != '' AND e.is_posted_tg = 1 ORDER BY e.name """ cursor.execute(sql, (post_id,)) @@ -950,9 +950,10 @@ def handle_list(message): vk_post_id = post_data['vk_post_id'] if post_data else "N/A" display_name = f"Анонс ВК {vk_post_id}" - response += f"• {display_name}\n" + # Названия постов выводим подчеркнутыми + response += f"• {display_name}\n" - # Получаем связанные мероприятия + # Получаем связанные мероприятия (только опубликованные) linked_events = get_linked_events_for_post(post_id) if linked_events: for event in linked_events: @@ -966,12 +967,20 @@ def handle_list(message): for sub in event_subscriptions: event_id = sub['event_id'] name = sub['name'] - event_link = format_channel_link(event_id) + is_posted_tg = sub.get('is_posted_tg', False) + is_visible = sub.get('is_visible', False) # Используем name если есть, иначе ID события display_name = name if name else f"Мероприятие {event_id}" - response += f"• {display_name}\n" + # Проверяем статус события + if is_posted_tg and is_visible: + # Опубликованное и видимое событие - с ссылкой + event_link = format_channel_link(event_id) + response += f"• {display_name}\n" + else: + # Неопубликованное или невидимое событие - без ссылки и зачеркнутым + response += f"• {display_name}\n" # Если нет подписок if not post_subscriptions and not event_subscriptions: @@ -1050,9 +1059,10 @@ def handle_callback(call): vk_post_id = post_data['vk_post_id'] if post_data else "N/A" display_name = f"Анонс ВК {vk_post_id}" - response += f"• {display_name}\n" + # Названия постов выводим подчеркнутыми + response += f"• {display_name}\n" - # Получаем связанные мероприятия + # Получаем связанные мероприятия (только опубликованные) linked_events = get_linked_events_for_post(post_id) if linked_events: for event in linked_events: @@ -1066,12 +1076,20 @@ def handle_callback(call): for sub in event_subscriptions: event_id = sub['event_id'] name = sub['name'] - event_link = format_channel_link(event_id) + is_posted_tg = sub.get('is_posted_tg', False) + is_visible = sub.get('is_visible', False) # Используем name если есть, иначе ID события display_name = name if name else f"Мероприятие {event_id}" - response += f"• {display_name}\n" + # Проверяем статус события + if is_posted_tg and is_visible: + # Опубликованное и видимое событие - с ссылкой + event_link = format_channel_link(event_id) + response += f"• {display_name}\n" + else: + # Неопубликованное или невидимое событие - без ссылки и зачеркнутым + response += f"• {display_name}\n" # Если нет подписок if not post_subscriptions and not event_subscriptions: