From 0a1909f0f4bb0219fdac982a53c15823f9014e30 Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Mon, 27 Jan 2020 23:48:33 +0200 Subject: [PATCH 1/2] Supports language in message entity `pre` --- aiogram/utils/text_decorations.py | 9 ++++++++- tests/test_utils/test_text_decorations.py | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/aiogram/utils/text_decorations.py b/aiogram/utils/text_decorations.py index 5b9502b7..125547e8 100644 --- a/aiogram/utils/text_decorations.py +++ b/aiogram/utils/text_decorations.py @@ -22,6 +22,7 @@ class TextDecoration: italic: str code: str pre: str + pre_language: str underline: str strikethrough: str quote: Callable[[AnyStr], AnyStr] @@ -34,8 +35,12 @@ class TextDecoration: :param text: :return: """ - if entity.type in ("bold", "italic", "code", "pre", "underline", "strikethrough"): + if entity.type in ("bold", "italic", "code", "underline", "strikethrough"): return getattr(self, entity.type).format(value=text) + if entity.type == "pre": + return (self.pre_language if entity.language else self.pre).format( + value=text, language=entity.language + ) elif entity.type == "text_mention": return self.link.format(value=text, link=f"tg://user?id={entity.user.id}") elif entity.type == "text_link": @@ -94,6 +99,7 @@ html_decoration = TextDecoration( italic="{value}", code="{value}", pre="
{value}
", + pre_language='
{value}
', underline="{value}", strikethrough="{value}", quote=html.escape, @@ -107,6 +113,7 @@ markdown_decoration = TextDecoration( italic="_{value}_\r", code="`{value}`", pre="```{value}```", + pre_language="```{language}\n{value}\n```", underline="__{value}__", strikethrough="~{value}~", quote=lambda text: re.sub(pattern=MARKDOWN_QUOTE_PATTERN, repl=r"\\\1", string=text), diff --git a/tests/test_utils/test_text_decorations.py b/tests/test_utils/test_text_decorations.py index babe0a58..ad822c8f 100644 --- a/tests/test_utils/test_text_decorations.py +++ b/tests/test_utils/test_text_decorations.py @@ -20,6 +20,11 @@ class TestTextDecoration: [html_decoration, MessageEntity(type="italic", offset=0, length=5), "test"], [html_decoration, MessageEntity(type="code", offset=0, length=5), "test"], [html_decoration, MessageEntity(type="pre", offset=0, length=5), "
test
"], + [ + html_decoration, + MessageEntity(type="pre", offset=0, length=5, language="python"), + '
test
', + ], [html_decoration, MessageEntity(type="underline", offset=0, length=5), "test"], [ html_decoration, @@ -51,6 +56,11 @@ class TestTextDecoration: [markdown_decoration, MessageEntity(type="italic", offset=0, length=5), "_test_\r"], [markdown_decoration, MessageEntity(type="code", offset=0, length=5), "`test`"], [markdown_decoration, MessageEntity(type="pre", offset=0, length=5), "```test```"], + [ + markdown_decoration, + MessageEntity(type="pre", offset=0, length=5, language="python"), + "```python\ntest\n```", + ], [markdown_decoration, MessageEntity(type="underline", offset=0, length=5), "__test__"], [ markdown_decoration, From 350a670bdfb02638ed5e5388f772903885caead1 Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Mon, 27 Jan 2020 23:55:45 +0200 Subject: [PATCH 2/2] Add handler for poll answer --- aiogram/dispatcher/filters/__init__.py | 1 + aiogram/dispatcher/router.py | 2 ++ docs/dispatcher/router.md | 7 +++++++ 3 files changed, 10 insertions(+) diff --git a/aiogram/dispatcher/filters/__init__.py b/aiogram/dispatcher/filters/__init__.py index 637fe181..21fb80c3 100644 --- a/aiogram/dispatcher/filters/__init__.py +++ b/aiogram/dispatcher/filters/__init__.py @@ -26,4 +26,5 @@ BUILTIN_FILTERS: Dict[str, Union[Tuple[BaseFilter], Tuple]] = { "shipping_query": (), "pre_checkout_query": (), "poll": (), + "poll_answer": (), } diff --git a/aiogram/dispatcher/router.py b/aiogram/dispatcher/router.py index 073e98d0..3bf5dd27 100644 --- a/aiogram/dispatcher/router.py +++ b/aiogram/dispatcher/router.py @@ -45,6 +45,7 @@ class Router: router=self, event_name="pre_checkout_query" ) self.poll_handler = TelegramEventObserver(router=self, event_name="poll") + self.poll_answer_handler = TelegramEventObserver(router=self, event_name="poll_answer") self.startup = EventObserver() self.shutdown = EventObserver() @@ -61,6 +62,7 @@ class Router: "shipping_query": self.shipping_query_handler, "pre_checkout_query": self.pre_checkout_query_handler, "poll": self.poll_handler, + "poll_answer": self.poll_answer_handler, } # Root handler diff --git a/docs/dispatcher/router.md b/docs/dispatcher/router.md index 09f3c916..30625281 100644 --- a/docs/dispatcher/router.md +++ b/docs/dispatcher/router.md @@ -109,6 +109,13 @@ async def poll_handler(poll: types.Poll) -> Any: pass ``` Is useful for handling [polls](../api/types/poll.md) +### Poll answer +```python3 +@router.poll_answer_handler() +async def poll_answer_handler(poll_answer: types.PollAnswer) -> Any: pass +``` +Is useful for handling [polls answers](../api/types/poll_answer.md) + ## Nested routers