feat(telegram): block-level markdown to html, wikilinks, tables, quotes, fence-safe chunking

This commit is contained in:
hh
2026-09-01 23:13:21 +02:00
parent f6a7ea8f29
commit 7853d61b94
2 changed files with 306 additions and 53 deletions
@@ -21,7 +21,7 @@ from typing import TYPE_CHECKING
from aiogram.exceptions import TelegramAPIError, TelegramBadRequest
from beaver_gateway.frontends.telegram.render import to_html
from beaver_gateway.frontends.telegram.render import to_html, to_html_tail
if TYPE_CHECKING:
from aiogram import Bot
@@ -112,12 +112,12 @@ class Draft:
async def _push(self) -> None:
self._dirty = False
self._last_sent = time.monotonic()
text = self._render()
rendered, plain = self._render()
try:
try:
await self._send(to_html(text), "HTML")
await self._send(rendered, "HTML")
except TelegramBadRequest:
await self._send(text, None)
await self._send(plain, None)
except TelegramAPIError as exc:
self._broken = True
_log.warning(
@@ -133,6 +133,9 @@ class Draft:
parse_mode=parse_mode,
)
def _render(self) -> str:
def _render(self) -> tuple[str, str]:
tail = self.text[-_TAIL:]
return f"{self.status}\n\n{tail}" if tail.strip() else self.status
if not tail.strip():
return to_html(self.status), self.status
rendered = f"{to_html(self.status)}\n\n{to_html_tail(self.text, _TAIL)}"
return rendered, f"{self.status}\n\n{tail}"