[ВОЛК] изменение формата выдачи ссылок при публикации события
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-12-25 23:02:23 +03:00
parent bc8b1569aa
commit 84cc0573e5
2 changed files with 68 additions and 9 deletions
+1 -1
View File
@@ -95,7 +95,7 @@ MAX_TEXT_LENGTH = 4000
# #
PZK_PREFIX = "https://reg.konvent.ru/zk2025/draft/plan/api/add/" PZK_PREFIX = "https://reg.konvent.ru/zk2025/draft/plan/api/add/"
EVT_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/api/" EVT_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/api/"
DESC_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/" # DESC_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/"
# VOLK mode API links # VOLK mode API links
# add category ID (volk24_larp for ex.) # add category ID (volk24_larp for ex.)
+67 -8
View File
@@ -95,9 +95,35 @@ async def tg_post_event(httpx_client, event_data):
try: try:
# Форматирование текста # Форматирование текста
tags = format_tags(event_data['tags']) tags = format_tags(event_data['tags'])
unit_name = prepare_text(event_data['unit_name'] or "") unit_name_raw = event_data.get('unit_name') or ""
name = prepare_text(event_data['name'] or "") name = prepare_text(event_data['name'] or "")
# Формируем название площадки с возможной ссылкой
unit_name = ""
if unit_name_raw:
unit_tg_id = event_data.get('unit_tg_id')
unit_title = event_data.get('unit_title') or unit_name_raw
unit_title_escaped = prepare_text(unit_title)
if unit_tg_id:
# Если площадка опубликована, делаем ссылку на сообщение
# Используем логику из format_channel_link из tg_mainbot.py
if CHANNEL_ID.startswith('@'):
# Публичный канал
channel_link = f"https://t.me/{CHANNEL_ID[1:]}/{unit_tg_id}"
elif CHANNEL_ID.startswith('-100'):
# Приватный канал с префиксом -100
channel_link = f"https://t.me/c/{CHANNEL_ID[4:]}/{unit_tg_id}"
else:
# Приватный канал без префикса или другой формат
channel_link = f"https://t.me/c/{CHANNEL_ID}/{unit_tg_id}"
# Формируем ссылку на сообщение
unit_name = f'<a href="{channel_link}">{unit_title_escaped}</a>'
else:
# Если площадка не опубликована, просто текст
unit_name = unit_title_escaped
# Получаем и подготавливаем описание события # Получаем и подготавливаем описание события
about_raw = event_data['about'] about_raw = event_data['about']
@@ -116,12 +142,20 @@ async def tg_post_event(httpx_client, event_data):
number = event_data['number'] number = event_data['number']
placeholder_message_id = '0' * 20 # Заполнитель для message_id placeholder_message_id = '0' * 20 # Заполнитель для message_id
# Формируем ссылки в зависимости от USE_SUBSCRIPTION_BOT # Формируем ссылки в зависимости от USE_SUBSCRIPTION_BOT и наличия DESC_PREFIX
links_parts = []
if DESC_PREFIX:
links_parts.append(f'🔎 <a href="{DESC_PREFIX}{number}/">Инфо</a>')
if USE_SUBSCRIPTION_BOT: if USE_SUBSCRIPTION_BOT:
links_line_placeholder = f'🔎 <a href="{DESC_PREFIX}{number}/">Инфо</a> | 📌 <a href="{PZK_PREFIX}{number}/">Иду</a> | 🔜 <a href="https://t.me/{RESPONDER_BOT_NAME}?start=event_{placeholder_message_id}">Подписка</a>' links_parts.append(f'📌 <a href="{PZK_PREFIX}{number}/">Иду</a>')
else: links_parts.append(f'🔜 <a href="https://t.me/{RESPONDER_BOT_NAME}?start=event_{placeholder_message_id}">Подписка</a>')
links_line_placeholder = f'🔎 <a href="{DESC_PREFIX}{number}/">Инфо</a>'
if links_parts:
links_line_placeholder = ' | '.join(links_parts)
links_line_length = len(links_line_placeholder) links_line_length = len(links_line_placeholder)
else:
links_line_placeholder = ""
links_line_length = 0
# Определяем максимальную длину в зависимости от типа сообщения # Определяем максимальную длину в зависимости от типа сообщения
image_url = event_data['about_social_picture'] image_url = event_data['about_social_picture']
@@ -317,11 +351,18 @@ async def tg_post_event(httpx_client, event_data):
raise raise
# Формируем финальный текст с ссылками # Формируем финальный текст с ссылками
links_parts = []
if DESC_PREFIX:
links_parts.append(f'🔎 <a href="{DESC_PREFIX}{number}/">Инфо</a>')
if USE_SUBSCRIPTION_BOT: if USE_SUBSCRIPTION_BOT:
links_line = f'🔎 <a href="{DESC_PREFIX}{number}/">Инфо</a> | 📌 <a href="{PZK_PREFIX}{number}/">Иду</a> | 🔜 <a href="https://t.me/{RESPONDER_BOT_NAME}?start=event_{message_id}">Подписка</a>' links_parts.append(f'📌 <a href="{PZK_PREFIX}{number}/">Иду</a>')
else: links_parts.append(f'🔜 <a href="https://t.me/{RESPONDER_BOT_NAME}?start=event_{message_id}">Подписка</a>')
links_line = f'🔎 <a href="{DESC_PREFIX}{number}/">Инфо</a>'
if links_parts:
links_line = ' | '.join(links_parts)
final_text = f"{initial_text}\n\n{links_line}" final_text = f"{initial_text}\n\n{links_line}"
else:
final_text = initial_text
await asyncio.sleep(2) await asyncio.sleep(2)
@@ -566,6 +607,24 @@ async def tg_post_event_by_id(id_event):
logger.info(f"Событие ID {id_event} не найдено или уже опубликовано") logger.info(f"Событие ID {id_event} не найдено или уже опубликовано")
return return
# Получаем информацию о категории (площадке), если указана unit_name
unit_tg_id = None
unit_title = None
if event.get('unit_name'):
cursor.execute("""
SELECT TITLE, tg_id
FROM categories
WHERE ID = %s
""", (event['unit_name'],))
category = cursor.fetchone()
if category:
unit_title = category.get('TITLE')
unit_tg_id = category.get('tg_id')
# Добавляем информацию о категории в данные события
event['unit_tg_id'] = unit_tg_id
event['unit_title'] = unit_title
old_message_id = event.get('tg_message_id') # Сохраняем старый ID сообщения old_message_id = event.get('tg_message_id') # Сохраняем старый ID сообщения
# Создаем httpx клиент с отключенным HTTP/2 # Создаем httpx клиент с отключенным HTTP/2
httpx_client = httpx.AsyncClient( httpx_client = httpx.AsyncClient(