mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-06 07:50:32 +00:00
Some checks failed
Tests / tests (macos-latest, 3.10) (push) Has been cancelled
Tests / tests (macos-latest, 3.11) (push) Has been cancelled
Tests / tests (macos-latest, 3.12) (push) Has been cancelled
Tests / tests (macos-latest, 3.13) (push) Has been cancelled
Tests / tests (ubuntu-latest, 3.10) (push) Has been cancelled
Tests / tests (ubuntu-latest, 3.11) (push) Has been cancelled
Tests / tests (ubuntu-latest, 3.12) (push) Has been cancelled
Tests / tests (ubuntu-latest, 3.13) (push) Has been cancelled
Tests / tests (windows-latest, 3.10) (push) Has been cancelled
Tests / tests (windows-latest, 3.11) (push) Has been cancelled
Tests / tests (windows-latest, 3.12) (push) Has been cancelled
Tests / tests (windows-latest, 3.13) (push) Has been cancelled
Tests / pypy-tests (macos-latest, pypy3.10) (push) Has been cancelled
Tests / pypy-tests (macos-latest, pypy3.11) (push) Has been cancelled
Tests / pypy-tests (ubuntu-latest, pypy3.10) (push) Has been cancelled
Tests / pypy-tests (ubuntu-latest, pypy3.11) (push) Has been cancelled
* Drop py3.9 and pypy3.9 Add pypy3.11 (testing) into `tests.yml` Remove py3.9 from matrix in `tests.yml` Refactor not auto-gen code to be compatible with py3.10+, droping ugly 3.9 annotation. Replace some `from typing` imports to `from collections.abc`, due to deprecation Add `from __future__ import annotations` and `if TYPE_CHECKING:` where possible Add some `noqa` to calm down Ruff in some places, if Ruff will be used as default linting+formatting tool in future Replace some relative imports to absolute Sort `__all__` tuples in `__init__.py` and some other `.py` files Sort `__slots__` tuples in classes Split raises into `msg` and `raise` (`EM101`, `EM102`) to not duplicate error message in the traceback Add `Self` from `typing_extenstion` where possible Resolve typing problem in `aiogram/filters/command.py:18` Concatenate nested `if` statements Convert `HandlerContainer` into a dataclass in `aiogram/fsm/scene.py` Bump tests docker-compose.yml `redis:6-alpine` -> `redis:8-alpine` Bump tests docker-compose.yml `mongo:7.0.6` -> `mongo:8.0.14` Bump pre-commit-config `black==24.4.2` -> `black==25.9.0` Bump pre-commit-config `ruff==0.5.1` -> `ruff==0.13.3` Update Makefile lint for ruff to show fixes Add `make outdated` into Makefile Use `pathlib` instead of `os.path` Bump `redis[hiredis]>=5.0.1,<5.3.0` -> `redis[hiredis]>=6.2.0,<7` Bump `cryptography>=43.0.0` -> `cryptography>=46.0.0` due to security reasons Bump `pytz~=2023.3` -> `pytz~=2025.2` Bump `pycryptodomex~=3.19.0` -> `pycryptodomex~=3.23.0` due to security reasons Bump linting and formatting tools * Add `1726.removal.rst` * Update aiogram/utils/dataclass.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update aiogram/filters/callback_data.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update 1726.removal.rst * Remove `outdated` from Makefile * Add `__slots__` to `HandlerContainer` * Remove unused imports * Add `@dataclass` with `slots=True` to `HandlerContainer` --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
209 lines
4.4 KiB
Python
209 lines
4.4 KiB
Python
from typing import Any
|
|
|
|
from .text_decorations import html_decoration, markdown_decoration
|
|
|
|
|
|
def _join(*content: Any, sep: str = " ") -> str:
|
|
return sep.join(map(str, content))
|
|
|
|
|
|
def text(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Join all elements with a separator
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return _join(*content, sep=sep)
|
|
|
|
|
|
def bold(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make bold text (Markdown)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.bold(value=markdown_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def hbold(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make bold text (HTML)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return html_decoration.bold(value=html_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def italic(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make italic text (Markdown)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.italic(value=markdown_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def hitalic(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make italic text (HTML)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return html_decoration.italic(value=html_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def code(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make mono-width text (Markdown)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.code(value=markdown_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def hcode(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make mono-width text (HTML)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return html_decoration.code(value=html_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def pre(*content: Any, sep: str = "\n") -> str:
|
|
"""
|
|
Make mono-width text block (Markdown)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.pre(value=markdown_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def hpre(*content: Any, sep: str = "\n") -> str:
|
|
"""
|
|
Make mono-width text block (HTML)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return html_decoration.pre(value=html_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def underline(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make underlined text (Markdown)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.underline(value=markdown_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def hunderline(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make underlined text (HTML)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return html_decoration.underline(value=html_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def strikethrough(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make strikethrough text (Markdown)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.strikethrough(
|
|
value=markdown_decoration.quote(_join(*content, sep=sep)),
|
|
)
|
|
|
|
|
|
def hstrikethrough(*content: Any, sep: str = " ") -> str:
|
|
"""
|
|
Make strikethrough text (HTML)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return html_decoration.strikethrough(value=html_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def link(title: str, url: str) -> str:
|
|
"""
|
|
Format URL (Markdown)
|
|
|
|
:param title:
|
|
:param url:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.link(value=markdown_decoration.quote(title), link=url)
|
|
|
|
|
|
def hlink(title: str, url: str) -> str:
|
|
"""
|
|
Format URL (HTML)
|
|
|
|
:param title:
|
|
:param url:
|
|
:return:
|
|
"""
|
|
return html_decoration.link(value=html_decoration.quote(title), link=url)
|
|
|
|
|
|
def blockquote(*content: Any, sep: str = "\n") -> str:
|
|
"""
|
|
Make blockquote (Markdown)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return markdown_decoration.blockquote(
|
|
value=markdown_decoration.quote(_join(*content, sep=sep)),
|
|
)
|
|
|
|
|
|
def hblockquote(*content: Any, sep: str = "\n") -> str:
|
|
"""
|
|
Make blockquote (HTML)
|
|
|
|
:param content:
|
|
:param sep:
|
|
:return:
|
|
"""
|
|
return html_decoration.blockquote(value=html_decoration.quote(_join(*content, sep=sep)))
|
|
|
|
|
|
def hide_link(url: str) -> str:
|
|
"""
|
|
Hide URL (HTML only)
|
|
Can be used for adding an image to a text message
|
|
|
|
:param url:
|
|
:return:
|
|
"""
|
|
return f'<a href="{url}">​</a>'
|