Merge remote-tracking branch 'origin/dev-3.x' into dev-3.x

This commit is contained in:
jrootjunior 2020-01-28 14:03:36 +02:00
commit da0b9a4203
5 changed files with 28 additions and 1 deletions

View file

@ -26,4 +26,5 @@ BUILTIN_FILTERS: Dict[str, Union[Tuple[BaseFilter], Tuple]] = {
"shipping_query": (),
"pre_checkout_query": (),
"poll": (),
"poll_answer": (),
}

View file

@ -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

View file

@ -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="<i>{value}</i>",
code="<code>{value}</code>",
pre="<pre>{value}</pre>",
pre_language='<pre><code class="language-{language}">{value}</code></pre>',
underline="<u>{value}</u>",
strikethrough="<s>{value}</s>",
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),

View file

@ -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

View file

@ -20,6 +20,11 @@ class TestTextDecoration:
[html_decoration, MessageEntity(type="italic", offset=0, length=5), "<i>test</i>"],
[html_decoration, MessageEntity(type="code", offset=0, length=5), "<code>test</code>"],
[html_decoration, MessageEntity(type="pre", offset=0, length=5), "<pre>test</pre>"],
[
html_decoration,
MessageEntity(type="pre", offset=0, length=5, language="python"),
'<pre><code class="language-python">test</code></pre>',
],
[html_decoration, MessageEntity(type="underline", offset=0, length=5), "<u>test</u>"],
[
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,