вывод ботом только опубликованных событий
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-10-14 17:38:46 +03:00
parent 9feb131e98
commit 7054c5fdd7
+31 -13
View File
@@ -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"• <a href='{post_link}'>{display_name}</a>\n"
# Названия постов выводим подчеркнутыми
response += f"• <u><a href='{post_link}'>{display_name}</a></u>\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"• <a href='{event_link}'>{display_name}</a>\n"
# Проверяем статус события
if is_posted_tg and is_visible:
# Опубликованное и видимое событие - с ссылкой
event_link = format_channel_link(event_id)
response += f"• <a href='{event_link}'>{display_name}</a>\n"
else:
# Неопубликованное или невидимое событие - без ссылки и зачеркнутым
response += f"• <s>{display_name}</s>\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"• <a href='{post_link}'>{display_name}</a>\n"
# Названия постов выводим подчеркнутыми
response += f"• <u><a href='{post_link}'>{display_name}</a></u>\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"• <a href='{event_link}'>{display_name}</a>\n"
# Проверяем статус события
if is_posted_tg and is_visible:
# Опубликованное и видимое событие - с ссылкой
event_link = format_channel_link(event_id)
response += f"• <a href='{event_link}'>{display_name}</a>\n"
else:
# Неопубликованное или невидимое событие - без ссылки и зачеркнутым
response += f"• <s>{display_name}</s>\n"
# Если нет подписок
if not post_subscriptions and not event_subscriptions: