fix(admin): escape HTML entities and convert Markdown formatting to prevent Telegram entity parsing errors

This commit is contained in:
Admin 2026-06-19 15:40:17 +04:00
parent 2b54649f4e
commit 2c38964cea

View file

@ -124,13 +124,25 @@ async def process_jurist_question(message: Message, state: FSMContext):
output = output.split("Update available:")[0].strip()
if proc.returncode == 0:
if len(output) > 4000:
parts = [output[i:i+4000] for i in range(0, len(output), 4000)]
import html
import re
# Заменяем <br>, <br/>, <br /> на переносы строк
clean_output = output.replace("<br>", "\n").replace("<br/>", "\n").replace("<br />", "\n")
# Экранируем спецсимволы для parse_mode='HTML'
safe_output = html.escape(clean_output)
# Форматируем **жирный** текст -> <b>жирный</b>
safe_output = re.sub(r'\*\*(.*?)\*\*', r'<b>\1</b>', safe_output, flags=re.DOTALL)
# Форматируем [ссылка](url) -> <a href="\2">\1</a>
safe_output = re.sub(r'\[(.*?)\]\((.*?)\)', r'<a href="\2">\1</a>', safe_output, flags=re.DOTALL)
if len(safe_output) > 4000:
parts = [safe_output[i:i+4000] for i in range(0, len(safe_output), 4000)]
await status_msg.edit_text(f"⚖️ <b>Анализ NotebookLM (часть 1):</b>\n\n{parts[0]}", parse_mode='HTML')
for part in parts[1:]:
await message.answer(part, parse_mode='HTML')
else:
await status_msg.edit_text(f"⚖️ <b>Анализ NotebookLM:</b>\n\n{output}", parse_mode='HTML')
await status_msg.edit_text(f"⚖️ <b>Анализ NotebookLM:</b>\n\n{safe_output}", parse_mode='HTML')
else:
await status_msg.edit_text(f"❌ <b>Ошибка запроса к NotebookLM:</b>\n{error or output}")
except Exception as e: