moved to user' object & fixes

This commit is contained in:
2024-11-07 22:25:32 +03:00
parent b5e6cfc7f8
commit dc4abee6bc
4 changed files with 63 additions and 50 deletions

View File

@ -3,11 +3,12 @@ from dataclasses import dataclass
from exception import UrlRemoverNotImplementedException
from urllib.parse import urlparse, parse_qs, urlencode, urlunparse
import re
from telebot.types import User
@dataclass(init=True, eq=True)
class TrackerRemovalProcessorMessage:
fromUsername: str
fromUser: User
text: str
@ -23,12 +24,17 @@ class TrackerRemovalMsgProcessor:
def process(self) -> TrackerRemovalResult:
if not self.__remove_trackers_from_msg_urls():
return TrackerRemovalResult(needsToReply=False, text="") # дальнейшие трансформации смысла не имеют
return TrackerRemovalResult(
needsToReply=False, text=""
) # дальнейшие трансформации смысла не имеют
self.__emplace_sender_into_msg_text()
return TrackerRemovalResult(needsToReply=True, text=self.__msg.text) # сообщение было изменено, нужно ответ отослать
return TrackerRemovalResult(
needsToReply=True, text=self.__msg.text
) # сообщение было изменено, нужно ответ отослать
def __remove_trackers_from_msg_urls(self) -> bool:
trackers_extracted = False
# todo: вообще мы работаем с http и это юзкейс обскьюрный
# но ссылка может быть и без указания схемы, телега может распарсить
# просто строку через точки и в конце какой то домен верхнего уровня как ссылку
@ -37,14 +43,14 @@ class TrackerRemovalMsgProcessor:
return len([s for s in SCHEMES if url.startswith(s)]) != 0
SEPARATOR_CHARS = [" ", "\n"]
separator_regex = "("+"|".join(SEPARATOR_CHARS)+")"
separator_regex = "(" + "|".join(SEPARATOR_CHARS) + ")"
lexems = re.split(separator_regex, self.__msg.text)
for i, l in enumerate(lexems):
if not is_url(l):
continue
removed_trackers_url = self.__remove_tracker(l)
if l == removed_trackers_url: # изменений урла не было
if l == removed_trackers_url: # изменений урла не было
continue
trackers_extracted = True
@ -68,7 +74,7 @@ class TrackerRemovalMsgProcessor:
return url
def __emplace_sender_into_msg_text(self):
self.__msg.text = f'Message from @{self.__msg.fromUsername}:\n\n{self.__msg.text}'
self.__msg.text = f'Message from <a href="tg://user?id={self.__msg.fromUser.id}">{self.__msg.fromUser.first_name}</a>:\n\n{self.__msg.text}'
class TrackerRemoverFactory:
@ -106,7 +112,5 @@ class TrackerRemoverFactory:
if QUERY_PARAMS_TRACKER in query_params:
del query_params[QUERY_PARAMS_TRACKER]
return urlunparse(
parsed_url._replace(
query=urlencode(query_params, doseq=True)
)
parsed_url._replace(query=urlencode(query_params, doseq=True))
)