mirror of
https://github.com/TeamPGM/pyrogram.git
synced 2024-11-16 12:51:18 +00:00
Add Mention link
This commit is contained in:
parent
55d0b93cf0
commit
74e5a5a5e1
@ -20,4 +20,5 @@ from .base_client import BaseClient
|
||||
from .dispatcher import Dispatcher
|
||||
from .emoji import Emoji
|
||||
from .file_data import FileData
|
||||
from .link import Link
|
||||
from .syncer import Syncer
|
||||
|
52
pyrogram/client/ext/link.py
Normal file
52
pyrogram/client/ext/link.py
Normal file
@ -0,0 +1,52 @@
|
||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-2020 Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Pyrogram is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import html
|
||||
|
||||
|
||||
class Link(str):
|
||||
HTML = "<a href={url}>{text}</a>"
|
||||
MD = "[{text}]({url})"
|
||||
|
||||
def __init__(self, url: str, text: str, style: str):
|
||||
super().__init__()
|
||||
|
||||
self.url = url
|
||||
self.text = text
|
||||
self.style = style
|
||||
|
||||
@staticmethod
|
||||
def format(url: str, text: str, style: str):
|
||||
if style in ["md", "markdown"]:
|
||||
fmt = Link.MD
|
||||
elif style in ["combined", "html", None]:
|
||||
fmt = Link.HTML
|
||||
else:
|
||||
raise ValueError("{} is not a valid style/parse mode".format(style))
|
||||
|
||||
return fmt.format(url=url, text=html.escape(text))
|
||||
|
||||
# noinspection PyArgumentList
|
||||
def __new__(cls, url, text, style):
|
||||
return str.__new__(cls, Link.format(url, text, style))
|
||||
|
||||
def __call__(self, other: str = None, *, style: str = None):
|
||||
return Link.format(self.url, other or self.text, style or self.style)
|
||||
|
||||
def __str__(self):
|
||||
return Link.format(self.url, self.text, self.style)
|
@ -16,11 +16,11 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import html
|
||||
from typing import List
|
||||
|
||||
import pyrogram
|
||||
from pyrogram.api import types
|
||||
from pyrogram.client.ext import Link
|
||||
from .chat_photo import ChatPhoto
|
||||
from .restriction import Restriction
|
||||
from ..object import Object
|
||||
@ -158,11 +158,9 @@ class User(Object, Update):
|
||||
self.photo = photo
|
||||
self.restrictions = restrictions
|
||||
|
||||
def __format__(self, format_spec):
|
||||
if format_spec == "mention":
|
||||
return '<a href="tg://user?id={0}">{1}</a>'.format(self.id, html.escape(self.first_name))
|
||||
|
||||
return html.escape(str(self))
|
||||
@property
|
||||
def mention(self):
|
||||
return Link("tg://user?id={}".format(self.id), self.first_name, self._client.parse_mode)
|
||||
|
||||
@staticmethod
|
||||
def _parse(client, user: types.User) -> "User" or None:
|
||||
|
Loading…
Reference in New Issue
Block a user