From f28ac0166536a2a4b68cac685a41ea667f60f7e9 Mon Sep 17 00:00:00 2001 From: yj <2077506045@qq.com> Date: 星期三, 03 九月 2025 14:43:03 +0800 Subject: [PATCH] 兼容企业微信 --- app/services/silence_service.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-) diff --git a/app/services/silence_service.py b/app/services/silence_service.py index 0161198..1e09770 100644 --- a/app/services/silence_service.py +++ b/app/services/silence_service.py @@ -5,8 +5,11 @@ import time from typing import Optional from loguru import logger +from sqlalchemy.orm import Session from app.services.redis_queue import redis_queue +from app.models.database import get_db +from app.models.contact import Contact from config import settings @@ -25,6 +28,39 @@ """鑾峰彇缇ょ粍闈欓粯缁撴潫鏃堕棿閿�""" return f"{self.silence_end_time_key_prefix}{group_id}" + def is_test_group(self, group_id: str) -> bool: + """ + 妫�鏌ユ寚瀹氱兢缁勬槸鍚︿负娴嬭瘯缇ょ粍 + + Args: + group_id: 缇ょ粍ID + + Returns: + 濡傛灉鏄祴璇曠兢缁勮繑鍥濼rue锛屽惁鍒欒繑鍥濬alse + """ + try: + # 妫�鏌ユ槸鍚﹂厤缃簡娴嬭瘯缇ょ粍鍏抽敭瀛� + if not settings.test_group_keywords: + return False + + # 浠庢暟鎹簱鏌ヨ缇ょ粍淇℃伅 + with next(get_db()) as db: + contact = db.query(Contact).filter(Contact.wc_id == group_id).first() + if not contact or not contact.nick_name: + return False + + # 妫�鏌ョ兢缁勬樀绉版槸鍚﹀寘鍚换浣曟祴璇曞叧閿瓧 + nick_name = contact.nick_name + for keyword in settings.test_group_keywords: + if keyword in nick_name: + logger.info(f"璇嗗埆鍒版祴璇曠兢缁�: group_id={group_id}, nick_name={nick_name}, keyword={keyword}") + return True + + return False + except Exception as e: + logger.error(f"妫�鏌ユ祴璇曠兢缁勫紓甯�: group_id={group_id}, error={str(e)}") + return False + def activate_silence_mode(self, group_id: str) -> bool: """ 婵�娲绘寚瀹氱兢缁勭殑闈欓粯妯″紡 @@ -36,6 +72,11 @@ 婵�娲绘垚鍔熻繑鍥濼rue锛屽け璐ヨ繑鍥濬alse """ try: + # 妫�鏌ユ槸鍚︿负娴嬭瘯缇ょ粍锛屽鏋滄槸鍒欎笉婵�娲婚潤榛樻ā寮� + if self.is_test_group(group_id): + logger.info(f"娴嬭瘯缇ょ粍涓嶆縺娲婚潤榛樻ā寮�: group_id={group_id}") + return False + if not settings.silence_mode_enabled: logger.debug("闈欓粯妯″紡鍔熻兘宸茬鐢�") return False -- Gitblit v1.9.1