Изменена функция экранирования Markdown: теперь она не экранирует символы, оставляя оригинальное форматирование от ИИ.
This commit is contained in:
parent
eaceba42c7
commit
a3fd7baa6a
43
bot.py
43
bot.py
@ -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"))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user