refactor(gateway): promote compile_mention_patterns to helpers

This commit is contained in:
teknium1 2026-07-29 09:36:26 -07:00 committed by Teknium
parent 21d1d08a2f
commit 58400a6793
5 changed files with 132 additions and 105 deletions

View file

@ -95,7 +95,7 @@ except Exception:
tea_util_models = None
from gateway.config import Platform, PlatformConfig
from gateway.platforms.helpers import MessageDeduplicator
from gateway.platforms.helpers import MessageDeduplicator, compile_mention_patterns
from gateway.platforms.base import (
BasePlatformAdapter,
MessageEvent,
@ -458,29 +458,13 @@ class DingTalkAdapter(BasePlatformAdapter):
loaded = [part.strip() for part in raw.split(",") if part.strip()]
patterns = loaded
if patterns is None:
return []
if isinstance(patterns, str):
patterns = [patterns]
if not isinstance(patterns, list):
logger.warning(
"[%s] dingtalk mention_patterns must be a list or string; got %s",
self.name,
type(patterns).__name__,
)
return []
compiled: List[re.Pattern] = []
for pattern in patterns:
if not isinstance(pattern, str) or not pattern.strip():
continue
try:
compiled.append(re.compile(pattern, re.IGNORECASE))
except re.error as exc:
logger.warning("[%s] Invalid DingTalk mention pattern %r: %s", self.name, pattern, exc)
if compiled:
logger.info("[%s] Loaded %d DingTalk mention pattern(s)", self.name, len(compiled))
return compiled
return compile_mention_patterns(
patterns,
log_prefix=self.name,
platform_label="dingtalk",
display_label="DingTalk",
logger_=logger,
)
def _load_allowed_users(self) -> Set[str]:
"""Load allowed-users list from config.extra or env var.

View file

@ -63,7 +63,7 @@ from gateway.platforms.base import (
ProcessingOutcome,
SendResult,
)
from gateway.platforms.helpers import strip_markdown
from gateway.platforms.helpers import compile_mention_patterns, strip_markdown
from .auth import load_project_credentials
@ -823,34 +823,12 @@ class PhotonAdapter(BasePlatformAdapter):
Mirrors the BlueBubbles implementation so both iMessage channels
accept the same configuration shapes.
"""
if raw is None:
patterns = list(_DEFAULT_MENTION_PATTERNS)
elif isinstance(raw, str):
text = raw.strip()
try:
loaded = json.loads(text) if text else []
except Exception:
loaded = None
patterns = loaded if isinstance(loaded, list) else [
part.strip()
for line in text.splitlines()
for part in line.split(",")
]
elif isinstance(raw, list):
patterns = raw
else:
patterns = [raw]
compiled: "list[re.Pattern]" = []
for pattern in patterns:
text = str(pattern).strip()
if not text:
continue
try:
compiled.append(re.compile(text, re.IGNORECASE))
except re.error as exc:
logger.warning("[photon] Invalid mention pattern %r: %s", text, exc)
return compiled
return compile_mention_patterns(
raw,
log_prefix="photon",
defaults=_DEFAULT_MENTION_PATTERNS,
logger_=logger,
)
def _message_matches_mention_patterns(self, text: str) -> bool:
if not text or not self._mention_patterns:

View file

@ -490,6 +490,7 @@ def _separate_chunk_indicator_from_fence(text: str) -> str:
from gateway.platforms.helpers import (
TABLE_SEPARATOR_RE as _TABLE_SEPARATOR_RE,
compile_mention_patterns,
convert_table_to_bullets as _wrap_markdown_tables,
)
@ -7821,29 +7822,13 @@ class TelegramAdapter(BasePlatformAdapter):
loaded = [part.strip() for part in raw.split(",") if part.strip()]
patterns = loaded
if patterns is None:
return []
if isinstance(patterns, str):
patterns = [patterns]
if not isinstance(patterns, list):
logger.warning(
"[%s] telegram mention_patterns must be a list or string; got %s",
self.name,
type(patterns).__name__,
)
return []
compiled: List[re.Pattern] = []
for pattern in patterns:
if not isinstance(pattern, str) or not pattern.strip():
continue
try:
compiled.append(re.compile(pattern, re.IGNORECASE))
except re.error as exc:
logger.warning("[%s] Invalid Telegram mention pattern %r: %s", self.name, pattern, exc)
if compiled:
logger.info("[%s] Loaded %d Telegram mention pattern(s)", self.name, len(compiled))
return compiled
return compile_mention_patterns(
patterns,
log_prefix=self.name,
platform_label="telegram",
display_label="Telegram",
logger_=logger,
)
def _is_group_chat(self, message: Message) -> bool:
chat = getattr(message, "chat", None)