mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-21 10:15:04 +02:00
Fix Telegram bold title broken by underscores in message body (#332)
Underscores in job names or error codes caused parse_mode to be disabled entirely, rendering *bold* markers as literal asterisks. Now escapes underscores in the body with \_ so Markdown stays enabled.
This commit is contained in:
@@ -9,6 +9,7 @@ All notable changes to Bambuddy will be documented in this file.
|
||||
- **H2C Nozzle Rack Text Unreadable on Light Filament Colors** ([#300](https://github.com/maziggy/bambuddy/issues/300)) — Nozzle rack slots use the loaded filament color as background, but white/light filaments made the white "0.4" text nearly invisible. Now uses a luminance check to switch to dark text on light backgrounds.
|
||||
- **File Downloads Show Generic Filenames** ([#334](https://github.com/maziggy/bambuddy/issues/334)) — Downloaded files with special characters in their names (spaces, umlauts, parentheses) were saved as generic `file_1`, `file_2` instead of the original filename. The `Content-Disposition` header parser now handles RFC 5987 percent-encoded filenames (`filename*=utf-8''...`) used by FastAPI for non-ASCII characters. Fix applied to all download endpoints (library files, archives, source files, F3D files, project exports, support bundles, printer files).
|
||||
- **Printer Card Cover Image Not Updating Between Prints** — The cover image on the printer card only refreshed on page reload. The `<img>` URL was always the same (`/printers/{id}/cover`) regardless of which print was active, so the browser served its cached image. Now appends the print name as a cache-busting query parameter so the browser fetches the new cover when a different print starts.
|
||||
- **Telegram Bold Title Broken by Underscores in Message** ([#332](https://github.com/maziggy/bambuddy/issues/332)) — Telegram notifications showed literal `*Title*` asterisks instead of bold text when the message body contained underscores (e.g. job name `A1_plate_8`, error code `0300_0001`). The code was disabling Markdown parsing entirely when underscores were detected. Now escapes underscores in the body with `\_` so Markdown rendering stays enabled.
|
||||
|
||||
### Improved
|
||||
- **Additional Currency Options** ([#329](https://github.com/maziggy/bambuddy/issues/329), [#333](https://github.com/maziggy/bambuddy/issues/333)) — Added 17 additional currencies to the cost tracking dropdown: HKD, INR, KRW, SEK, NOK, DKK, PLN, BRL, TWD, SGD, NZD, MXN, CZK, THB, ZAR, RUB.
|
||||
|
||||
@@ -267,19 +267,20 @@ class NotificationService:
|
||||
|
||||
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
|
||||
|
||||
# Check if message contains characters that break Markdown parsing
|
||||
# URLs and error codes with underscores cause issues
|
||||
has_url = "http://" in message or "https://" in message
|
||||
# Check for underscores outside of the bold title (odd number of _ breaks markdown)
|
||||
body_part = message.split("\n", 1)[1] if "\n" in message else ""
|
||||
has_problematic_underscore = "_" in body_part
|
||||
# Escape underscores in the message body so Telegram Markdown
|
||||
# parsing doesn't break on job names like "A1_plate_8" or error
|
||||
# codes like "0300_0001". The title is already wrapped in *bold*
|
||||
# markers, so only escape after the first newline.
|
||||
if "\n" in message:
|
||||
title_part, body_part = message.split("\n", 1)
|
||||
body_part = body_part.replace("_", "\\_")
|
||||
message = f"{title_part}\n{body_part}"
|
||||
|
||||
data = {
|
||||
"chat_id": chat_id,
|
||||
"text": message,
|
||||
"parse_mode": "Markdown",
|
||||
}
|
||||
if not has_url and not has_problematic_underscore:
|
||||
data["parse_mode"] = "Markdown"
|
||||
|
||||
client = await self._get_client()
|
||||
response = await client.post(url, json=data)
|
||||
|
||||
Reference in New Issue
Block a user