b2541c4054
feat: add configurable matrix permalink base, unify user placeholders, and refactor notification rendering
99 lines
2.6 KiB
Python
Executable File
99 lines
2.6 KiB
Python
Executable File
"""Message and content utility functions."""
|
|
|
|
import re
|
|
from typing import Optional
|
|
from mautrix.types import MessageType, MediaMessageEventContent
|
|
|
|
|
|
def flag_message(msg, censor_wordlist: list, censor_files: bool) -> bool:
|
|
"""Check if a message should be flagged for censorship.
|
|
|
|
Args:
|
|
msg: The message event to check
|
|
censor_wordlist: List of regex patterns to check against
|
|
censor_files: Whether to flag file messages
|
|
|
|
Returns:
|
|
bool: True if message should be flagged
|
|
"""
|
|
if msg.content.msgtype in [
|
|
MessageType.FILE,
|
|
MessageType.IMAGE,
|
|
MessageType.VIDEO,
|
|
]:
|
|
return censor_files
|
|
|
|
for w in censor_wordlist:
|
|
try:
|
|
if bool(re.search(w, msg.content.body, re.IGNORECASE)):
|
|
return True
|
|
except Exception:
|
|
# Skip invalid regex patterns
|
|
pass
|
|
|
|
return False
|
|
|
|
|
|
def flag_instaban(msg, instaban_wordlist: list) -> bool:
|
|
"""Check if a message should trigger an instant ban.
|
|
|
|
Args:
|
|
msg: The message event to check
|
|
instaban_wordlist: List of regex patterns that trigger instant ban
|
|
|
|
Returns:
|
|
bool: True if message should trigger instant ban
|
|
"""
|
|
for w in instaban_wordlist:
|
|
try:
|
|
if bool(re.search(w, msg.content.body, re.IGNORECASE)):
|
|
return True
|
|
except Exception:
|
|
# Skip invalid regex patterns
|
|
pass
|
|
|
|
return False
|
|
|
|
|
|
def censor_room(msg, censor_config) -> bool:
|
|
"""Check if a message should be censored based on room configuration.
|
|
|
|
Args:
|
|
msg: The message event to check
|
|
censor_config: Censor configuration (bool or list of room IDs)
|
|
|
|
Returns:
|
|
bool: True if message should be censored
|
|
"""
|
|
if isinstance(censor_config, bool):
|
|
return censor_config
|
|
elif isinstance(censor_config, list):
|
|
return msg.room_id in censor_config
|
|
else:
|
|
return False
|
|
|
|
|
|
def sanitize_room_name(room_name: str) -> str:
|
|
"""Sanitize a room name for use in aliases.
|
|
|
|
Args:
|
|
room_name: The room name to sanitize
|
|
|
|
Returns:
|
|
str: Sanitized room name (alphanumeric only, lowercase)
|
|
"""
|
|
return re.sub(r"[^a-zA-Z0-9]", "", room_name).lower()
|
|
|
|
|
|
def generate_community_slug(community_name: str) -> str:
|
|
"""Generate a community slug from the community name.
|
|
|
|
Args:
|
|
community_name: The full community name
|
|
|
|
Returns:
|
|
str: A slug made from the first letter of each word, lowercase
|
|
"""
|
|
words = community_name.strip().split()
|
|
return "".join(word[0].lower() for word in words if word)
|