Изменена функция экранирования Markdown: теперь она не экранирует символы, оставляя оригинальное форматирование от ИИ.

This commit is contained in:
NikitolProject 2025-04-27 07:02:53 +03:00
parent eaceba42c7
commit a3fd7baa6a

43
bot.py
View File

@ -155,47 +155,8 @@ async def keep_typing(chat_id: int):
def escape_markdown(text: str) -> str:
"""Экранирует специальные символы Markdown, если они не являются частью форматирования"""
# Регулярное выражение для поиска уже отформатированного текста
md_patterns = [
r'`[^`]+`', # Код
r'\*\*[^*]+\*\*', # Жирный
r'\*[^*]+\*', # Курсив
r'_[^_]+_', # Курсив (альтернативный)
r'__[^_]+__', # Жирный (альтернативный)
r'\[[^\]]+\]\([^)]+\)', # Ссылки
]
# Собираем все совпадения с шаблонами
matches = []
for pattern in md_patterns:
matches.extend([(m.start(), m.end()) for m in re.finditer(pattern, text)])
# Сортируем по началу совпадения
matches.sort()
# Если нет совпадений, просто экранируем все специальные символы
if not matches:
return re.sub(r'([_*\[\]()~`>#+-=|{}.!\\])', r'\\\1', text)
# Иначе экранируем только те символы, которые не входят в уже отформатированный текст
result = ""
last_pos = 0
for start, end in matches:
# Экранируем символы до начала форматирования
if start > last_pos:
result += re.sub(r'([_*\[\]()~`>#+-=|{}.!\\])', r'\\\1', text[last_pos:start])
# Добавляем отформатированный текст без изменений
result += text[start:end]
last_pos = end
# Экранируем символы после последнего форматирования
if last_pos < len(text):
result += re.sub(r'([_*\[\]()~`>#+-=|{}.!\\])', r'\\\1', text[last_pos:])
return result
"""Не экранирует символы, оставляя оригинальное форматирование от ИИ"""
return text
@dp.message(Command("start"))