diff --git a/files/helpers/sanitize.py b/files/helpers/sanitize.py index 3979da732..0a16e3ae4 100644 --- a/files/helpers/sanitize.py +++ b/files/helpers/sanitize.py @@ -144,23 +144,30 @@ def sanitize(sanitized, alert=False, comment=False, edit=False): sanitized = sanitized.replace('‎','').replace('​','').replace("\ufeff", "").replace("𒐪","") if alert: - captured = [] - for i in mention_regex2.finditer(sanitized): - if i.group(0) in captured: continue - captured.append(i.group(0)) + matches = { g.group(1):g for g in mention_regex2.finditer(sanitized) if g } + users = get_users(matches.keys(),graceful=True) - u = get_user(i.group(1), graceful=True) + captured = [] + for u in users: if u: - sanitized = sanitized.replace(i.group(0), f'''

@{u.username}''') + i = matches.get(u.username) or matches.get(u.original_username) + if i.group(0) not in captured: + captured.append(i.group(0)) + sanitized = sanitized.replace(i.group(0), f'''

@{u.username}''') else: sanitized = reddit_regex.sub(r'\1/\2', sanitized) sanitized = sub_regex.sub(r'\1/\2', sanitized) - for i in mention_regex.finditer(sanitized): - u = get_user(i.group(2), graceful=True) - if u and (not (g.v and g.v.any_block_exists(u)) or g.v.admin_level > 1): - sanitized = sanitized.replace(i.group(0), f'''{i.group(1)}@{u.username}''', 1) + matches = [ m for m in mention_regex.finditer(sanitized) if m ] + names = set( m.group(2) for m in matches ) + users = get_users(names,graceful=True) + for u in users: + if not u: continue + m = [ m for m in matches if u.username == m.group(2) or u.original_username == m.group(2) ] + for i in m: + if not (g.v and g.v.any_block_exists(u)) or g.v.admin_level > 1: + sanitized = sanitized.replace(i.group(0), f'''{i.group(1)}@{u.username}''', 1) sanitized = imgur_regex.sub(r'\1_d.webp?maxwidth=9999&fidelity=high', sanitized)