feat(telegram): block-level markdown to html, wikilinks, tables, quotes, fence-safe chunking
This commit is contained in:
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user