Экранирование символов Markdown2
Подскажите, как правильно задать экранирование символов в Markdown_v2. Пишу скрипт, который через Github Action отправляет в телеграм бота уведомление, если встретилась та или иная ошибка в коде. Уже все перепробовал, но не удается отправка, вечная ошибка с некорректным экранированием
- name: Notify via Telegram
run: |
set -x
if [[ -z "${{ secrets.TELEGRAM_BOT_TOKEN }}" ]] || [[ -z "${{ secrets.TELEGRAM_CHAT_ID }}" ]]; then
echo "ERROR: Telegram secrets not configured"
exit 1
fi
TIMESTAMP=$(TZ=Europe/Moscow date +"%H:%M, %d.%m.%Y")
ERR_MSG=""
CHANGES_MSG=""
ERRORS=0
send_telegram_error() {
local logfile="$1"
local filename="$2"
if [[ -s "$logfile" ]]; then
local error_text=$(head -20 "$logfile" | sed 's/^/- /' \
| sed 's/\\/\\\\/g' \
| sed 's/\./\\./g' \
| sed 's/_/\\_/g' \
| sed 's/\*/\\*/g' \
| sed 's/\[/\\[/g' \
| sed 's/\]/\\]/g' \
| sed 's/(/\\(/g' \
| sed 's/)/\\)/g' \
| sed 's/~/\\~/g' \
| sed 's/`/\\`/g' \
| sed 's/>/\\>/g' \
| sed 's/#/\\#/g' \
| sed 's/+/\\+/g' \
| sed 's/-/\\-/g' \
| sed 's/=/\\=/g' \
| sed 's/|/\\|/g' \
| sed 's/{/\\{/g' \
| sed 's/}/\\}/g' \
| sed 's/!/\\!/g')
local message="*❌ Ошибка при проверке нормативов*
? Время: \`$TIMESTAMP\`
? Файл: $filename
? Ошибка:
\`\`\`
$error_text
\`\`\`"
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
-d chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \
-d parse_mode="MarkdownV2" \
--data-urlencode "text=$message"
ERRORS=1
fi
}
send_telegram_error "error_all_norms.log" "scripts/check_all_norms.py"
send_telegram_error "error_wpf_wbf.log" "scripts/check_wpf_wbf_blocks.py"
if [[ $ERRORS -eq 1 ]]; then
exit 1
fi
print('q')
CHANGES=""
if git diff HEAD~1 --name-only 2>/dev/null | grep -q .; then
CHANGES=$(git diff HEAD~1 --name-only 2>/dev/null)
fi
print(CHANGES)
CHANGES_LIST=$(echo "$CHANGES" | sed 's/^/- /' | sed 's/[_*[\]()~`>#+=|{}.!-]/\\&/g' | sed 's/^- /\\- /' | sed 's/\./\\./g' | sed 's/_/\\_/g')
ERRORS_MSG=""
if [[ -s error_all_norms.log ]] || [[ -s error_wpf_wbf.log ]]; then
ERRORS_MSG="❌ Обнаружены ошибки при проверке нормативов"
fi
if [[ -z "$CHANGES" ]]; then
if [[ -z "$ERRORS_MSG" ]]; then
MESSAGE="*?️ Проверка нормативов завершена*
? Время: \`$TIMESTAMP\`
❌ Изменения не обнаружены"
else
MESSAGE="*?️ Проверка нормативов завершена*
? Время: \`$TIMESTAMP\`
❌ Изменения не обнаружены
$ERRORS_MSG"
fi
else
if [[ -z "$ERRORS_MSG" ]]; then
MESSAGE="*?️ Обнаружены обновления нормативов*
? Время: \`$TIMESTAMP\`
? Изменённые файлы: $CHANGES_LIST"
else
MESSAGE="*?️ Обнаружены обновления нормативов*
? Время: \`$TIMESTAMP\`
? Изменённые файлы: $CHANGES_LIST
$ERRORS_MSG"
fi
fi
echo "Sending message: $MESSAGE"
echo "CHANGES_LIST preview:"
echo "$CHANGES_LIST" | head -3
curl -s -X POST https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage \
-d chat_id=${{ secrets.TELEGRAM_CHAT_ID }} \
-d parse_mode=MarkdownV2 \
--data-urlencode "text=$MESSAGE"
env:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}