From b8cd06fd6f87cd18b768bf81130ab19bd1c831de Mon Sep 17 00:00:00 2001 From: sheldy <85823514+sheldygg@users.noreply.github.com> Date: Wed, 2 Nov 2022 22:40:19 +0200 Subject: [PATCH] add method for get user mention (#1049) * add new method * Create 1049.feature.rst * update test_user * after black and isort using * after black and isort using * adding new tests * fix test * update tests * update test * using create_tg_link function instead of new func * Update user.py * Update aiogram/types/user.py Co-authored-by: Alex Root Junior --- CHANGES/1049.feature.rst | 4 ++++ aiogram/types/user.py | 17 +++++++++++++- tests/test_api/test_types/test_user.py | 32 ++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 CHANGES/1049.feature.rst diff --git a/CHANGES/1049.feature.rst b/CHANGES/1049.feature.rst new file mode 100644 index 00000000..c54bef04 --- /dev/null +++ b/CHANGES/1049.feature.rst @@ -0,0 +1,4 @@ +Added following methods to ``User`` class: + +- ``User.mention_markdown(...)`` +- ``User.mention_html(...)`` diff --git a/aiogram/types/user.py b/aiogram/types/user.py index 64eb5c73..f9e8af24 100644 --- a/aiogram/types/user.py +++ b/aiogram/types/user.py @@ -2,13 +2,14 @@ from __future__ import annotations from typing import Optional +from ..utils.link import create_tg_link +from ..utils import markdown from .base import TelegramObject class User(TelegramObject): """ This object represents a Telegram user or bot. - Source: https://core.telegram.org/bots/api#user """ @@ -40,3 +41,17 @@ class User(TelegramObject): if self.last_name: return f"{self.first_name} {self.last_name}" return self.first_name + + @property + def url(self) -> str: + return create_tg_link("user", id=self.id) + + def mention_markdown(self, name: Optional[str] = None) -> str: + if name is None: + name = self.full_name + return markdown.link(name, self.url) + + def mention_html(self, name: Optional[str] = None) -> str: + if name is None: + name = self.full_name + return markdown.hlink(name, self.url) diff --git a/tests/test_api/test_types/test_user.py b/tests/test_api/test_types/test_user.py index bda3f94e..c57c0704 100644 --- a/tests/test_api/test_types/test_user.py +++ b/tests/test_api/test_types/test_user.py @@ -18,3 +18,35 @@ class TestUser: def test_full_name(self, first: str, last: str, result: bool): user = User(id=42, is_bot=False, first_name=first, last_name=last) assert user.full_name == result + + @pytest.mark.parametrize( + "first,last,name", + [ + ["User", None, "bebra"], + ["", None, "telegram"], + [" ", None, "queue🤬"], + ["User", "Name", "Alex"], + ["User", " ", "aslo "], + [" ", " ", "telebot"], + ], + ) + def test_get_mention_markdown(self, first: str, last: str, name: str): + user = User(id=42, is_bot=False, first_name=first, last_name=last) + assert user.mention_markdown() == f"[{user.full_name}](tg://user?id=42)" + assert user.mention_markdown(name=name) == f"[{name}](tg://user?id=42)" + + @pytest.mark.parametrize( + "first,last,name", + [ + ["User", None, "bebra"], + ["", None, "telegram"], + [" ", None, "queue🤬"], + ["User", "Name", "Alex"], + ["User", " ", "aslo "], + [" ", " ", "telebot"], + ], + ) + def test_get_mention_html(self, first: str, last: str, name: str): + user = User(id=42, is_bot=False, first_name=first, last_name=last) + assert user.mention_html() == f'{user.full_name}' + assert user.mention_html(name=name) == f'{name}'