Event: add [(text, link)] mentions attributes
This commit is contained in:
parent
8e7cd7bde9
commit
688f36b7f1
|
@ -3,7 +3,7 @@
|
|||
"""HTML and Markdown processing tools."""
|
||||
|
||||
import re
|
||||
from typing import DefaultDict, Dict
|
||||
from typing import DefaultDict, Dict, List, Tuple
|
||||
from urllib.parse import unquote
|
||||
|
||||
import html_sanitizer.sanitizer as sanitizer
|
||||
|
@ -138,6 +138,9 @@ class HTMLProcessor:
|
|||
user_id_regex, room_id_regex, room_alias_regex,
|
||||
]]
|
||||
|
||||
link_is_matrix_to_regex = re.compile(
|
||||
r"https?://matrix.to/#/.+", re.IGNORECASE,
|
||||
)
|
||||
link_is_user_id_regex = re.compile(
|
||||
r"https?://matrix.to/#/@.+", re.IGNORECASE,
|
||||
)
|
||||
|
@ -184,13 +187,21 @@ class HTMLProcessor:
|
|||
]
|
||||
|
||||
|
||||
def user_id_link_in_html(self, html: str, user_id: str) -> bool:
|
||||
def mentions_in_html(self, html: str) -> List[Tuple[str, str]]:
|
||||
if not html.strip():
|
||||
return False
|
||||
return []
|
||||
|
||||
return [
|
||||
(a_tag.text, href)
|
||||
for a_tag, _, href, _ in lxml.html.iterlinks(html)
|
||||
if self.link_is_matrix_to_regex.match(unquote(href.strip()))
|
||||
]
|
||||
|
||||
|
||||
def user_id_link_in_html(self, html: str, user_id: str) -> bool:
|
||||
regex = re.compile(rf"https?://matrix.to/#/{user_id}", re.IGNORECASE)
|
||||
|
||||
for _, _, href, _ in lxml.html.iterlinks(html):
|
||||
for _, href in self.mentions_in_html(html):
|
||||
if regex.match(unquote(href.strip())):
|
||||
return True
|
||||
|
||||
|
|
|
@ -175,10 +175,11 @@ class Event(ModelItem):
|
|||
sender_name: str = field()
|
||||
sender_avatar: str = field()
|
||||
|
||||
content: str = ""
|
||||
inline_content: str = ""
|
||||
reason: str = ""
|
||||
links: List[str] = field(default_factory=list)
|
||||
content: str = ""
|
||||
inline_content: str = ""
|
||||
reason: str = ""
|
||||
links: List[str] = field(default_factory=list)
|
||||
mentions: List[Tuple[str, str]] = field(default_factory=list)
|
||||
|
||||
type_specifier: TypeSpecifier = TypeSpecifier.Unset
|
||||
|
||||
|
|
|
@ -105,7 +105,11 @@ class NioCallbacks:
|
|||
rooms = self.client.models[self.client.user_id, "rooms"]
|
||||
rooms[room.room_id].mentions += 1
|
||||
|
||||
await self.client.register_nio_event(room, ev, content=co)
|
||||
mention_list = HTML_PROCESSOR.mentions_in_html(co)
|
||||
|
||||
await self.client.register_nio_event(
|
||||
room, ev, content=co, mentions=mention_list,
|
||||
)
|
||||
|
||||
|
||||
async def onRoomMessageNotice(self, room, ev) -> None:
|
||||
|
|
Loading…
Reference in New Issue
Block a user