from .response import Response from typing import Callable, List import re import random from bs4 import BeautifulSoup type Patcher = Callable[[Response, 'Request'], Response] def find_substring_in_lines(s, substring): for line_index, line in enumerate(s.splitlines()): position = line.find(substring) if position != -1: return line_index return 0 def extract_words_from_line(line): clean_line = re.sub(r'<[^>]+>', '', line) words = clean_line.split() return words def uwuify_text(text): replacements = [ (r'r', 'w'), (r'l', 'w'), (r'R', 'W'), (r'L', 'W'), (r'no', 'nyo'), (r'No', 'Nyo'), (r'u', 'uwu'), (r'U', 'Uwu') ] for pattern, replacement in replacements: text = re.sub(pattern, replacement, text) expressions = [" owo", " UwU", " rawr", " >w<"] sentences = text.split('. ') uwuified_sentences = [] for sentence in sentences: sentence = sentence.strip() if sentence: uwuified_sentences.append(sentence + (random.choice(expressions) if random.randint(0, 5) > 4 else '')) return '. '.join(uwuified_sentences) def apply_url_params(body, params: str): body = body.decode('utf-8') soup = BeautifulSoup(body, 'html.parser') for a_tag in soup.find_all('a', href=True): original_href = a_tag['href'] if '?' in original_href: new_href = f"{original_href}&{params}" else: new_href = f"{original_href}?{params}" a_tag['href'] = new_href return str(soup) def uwuify(body): body = body.decode('utf-8') soup = BeautifulSoup(body, 'html.parser') for text in soup.find_all(text=True): if text.parent.name not in ['script', 'style']: original_text = text.string words = extract_words_from_line(original_text) uwuified_words = [uwuify_text(word) for word in words] uwuified_text = ' '.join(uwuified_words) text.replace_with(uwuified_text) for a_tag in soup.find_all('a', href=True): original_href = a_tag['href'] if '?' in original_href: new_href = f"{original_href}&uwu=true" else: new_href = f"{original_href}?uwu=true" a_tag['href'] = new_href return str(soup) def is_subdict(sub_dict, main_dict): for key, value in sub_dict.items(): if key not in main_dict or main_dict[key] != value: return False return True patchers: List[Patcher] = [ # lambda response, request: Response( # response.code, # response.headers, # "\n".join(line.replace('e', 'a') if index > find_substring_in_lines(response.body.decode('utf-8'), '') else line for index, line in enumerate(response.body.decode('utf-8').splitlines())).encode('utf-8') # ) if 'text/html' in response.headers.values() else response lambda response, request: Response( response.code, response.headers, uwuify(response.body).encode('utf-8') ) if 'text/html' in response.headers.values() and is_subdict({'uwu': 'true'}, request.path.params) else response, lambda response, request: Response( response.code, response.headers, re.sub(r'sludge', lambda match: 'sludge' + ' (/slʌd͡ʒ/)' if random.randint(0, 5) < 1 else 'sludge', response.body.decode('utf-8')).encode('utf-8') ) if 'text/html' in response.headers.values() else response, lambda response, request: Response( response.code, response.headers, apply_url_params(response.body.replace(b'', b''), 'swing=true').encode('utf-8') ) if 'text/html' in response.headers.values() and (random.randint(0, 100) < 1 or is_subdict({'swing': 'true'}, request.path.params)) else response, # spiin! lambda response, request: Response( response.code, response.headers, apply_url_params(response.body.replace(b'', b''), 'spiin=true').encode('utf-8') ) if 'text/html' in response.headers.values() and (random.randint(0, 1000) < 1 or is_subdict({'spiin': 'true'}, request.path.params)) else response ]