fix: не экранировать backticks в выводе команд для правильной разбивки блоков кода

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad 2026-02-27 18:40:16 +08:00
parent 28e671af9c
commit ba13eb2a1a
1 changed files with 2 additions and 6 deletions

8
bot.py
View File

@ -1634,23 +1634,19 @@ async def _show_result_message(update: Update, command: str, output: str, error:
if output:
# Показываем ВЕСЬ вывод, разбивая на сообщения если нужно
# Экранируем backticks в output чтобы они не ломали блоки кода
output = output.replace("```", "\\`\\`\\`").replace("`", "\\`")
# НЕ экранируем backticks — send_long_message сам разобьёт на блоки
result += f"```\n{output}\n```\n"
logger.info(f"Добавлен output в результат, длина result={len(result)}")
else:
logger.warning("output пустой после обработки!")
if error:
# Экранируем backticks в error
error = error.replace("```", "\\`\\`\\`").replace("`", "\\`")
# НЕ экранируем backticks
result += f"*Ошибки:*\n```\n{error}\n```\n"
result += f"\n*Код возврата:* `{returncode}`"
# Экранируем специальные символы Markdown ТОЛЬКО вне блоков кода
# Блоки кода (```) уже защищены — их содержимое не трогаем
# Экранируем: * _ ( ) [ ] но не ` и не содержимое ```
result = smart_escape_markdown(result)
logger.info(f"Отправляю сообщение, длина={len(result)}")
await send_long_message(update, result, parse_mode="Markdown", pause_every=3)