Изменена функция экранирования 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:
|
def escape_markdown(text: str) -> str:
|
||||||
"""Экранирует специальные символы Markdown, если они не являются частью форматирования"""
|
"""Не экранирует символы, оставляя оригинальное форматирование от ИИ"""
|
||||||
# Регулярное выражение для поиска уже отформатированного текста
|
return text
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
@dp.message(Command("start"))
|
@dp.message(Command("start"))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user