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/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="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,