1. 新增测试群组关键字,测试群组名称包含关键字,在其中发言一律不触发静默。
5个文件已修改
8个文件已删除
1613 ■■■■■ 已修改文件
app/services/friend_ignore_service.py 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/services/message_processor.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/services/silence_service.py 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
logs/app.log 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/__init__.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/test_api.py 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/test_dify_streaming.py 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/test_friend_ignore_service.py 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/test_message_aggregator.py 405 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/test_message_processor.py 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/test_online_status_monitor.py 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/test_silence_service.py 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/services/friend_ignore_service.py
@@ -8,6 +8,7 @@
from app.services.redis_queue import redis_queue
from app.models.database import get_db
from app.models.contact import Contact
from app.services.silence_service import silence_service
from config import settings
@@ -84,18 +85,20 @@
            logger.error(f"添加好友到忽略列表异常: error={str(e)}")
            return False
    def is_friend_ignored(self, w_id: str) -> bool:
    def is_friend_ignored(self, w_id: str, group_id: Optional[str] = None) -> bool:
        """
        检查指定w_id是否应该被忽略
        逻辑:
        1. 如果好友忽略功能未启用,返回False(不忽略)
        2. 如果w_id在白名单中,返回False(不忽略)
        3. 如果w_id在忽略列表中,返回True(忽略)
        4. 如果w_id不在忽略列表中,返回False(不忽略)
        3. 如果w_id在忽略列表中,但所在群组为测试群组,返回False(不忽略)
        4. 如果w_id在忽略列表中,返回True(忽略)
        5. 如果w_id不在忽略列表中,返回False(不忽略)
        Args:
            w_id: 用户w_id
            group_id: 群组ID(可选),用于检查是否为测试群组
        Returns:
            如果应该被忽略返回True,否则返回False
@@ -116,8 +119,13 @@
            is_in_ignore_list = redis_queue.redis_client.sismember(self.ignore_list_key, w_id)
            if is_in_ignore_list:
                # 如果在忽略列表中,检查是否在测试群组中
                if group_id and silence_service.is_test_group(group_id):
                    logger.info(f"测试群组中的好友消息不被忽略: w_id={w_id}, group_id={group_id}")
                    return False
                logger.info(f"w_id在忽略列表中,忽略消息: w_id={w_id}")
            return is_in_ignore_list
        except Exception as e:
app/services/message_processor.py
@@ -201,8 +201,8 @@
        from_user = data.get("fromUser")
        from_group = data.get("fromGroup")
        # 检查发送者是否在好友忽略列表中
        is_friend_ignored = friend_ignore_service.is_friend_ignored(from_user)
        # 检查发送者是否在好友忽略列表中(传入群组ID用于测试群组检查)
        is_friend_ignored = friend_ignore_service.is_friend_ignored(from_user, from_group)
        if is_friend_ignored:
            logger.info(
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:
            如果是测试群组返回True,否则返回False
        """
        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 @@
            激活成功返回True,失败返回False
        """
        try:
            # 检查是否为测试群组,如果是则不激活静默模式
            if self.is_test_group(group_id):
                logger.info(f"测试群组不激活静默模式: group_id={group_id}")
                return True
            if not settings.silence_mode_enabled:
                logger.debug("静默模式功能已禁用")
                return False
config.py
@@ -118,6 +118,9 @@
        # 结束字符串配置
        self.end_str_list = config_data.get("end_str_list", [])
        # 测试群组关键字配置
        self.test_group_keywords = config_data.get("test_group_keywords", [])
    def update_ecloud_w_id(self, new_w_id: str) -> bool:
        """
logs/app.log
@@ -1,2 +1,3 @@
2025-08-22 16:15:05 | INFO | __main__:<module>:132 - 启动E云管家-DifyAI对接服务
2025-08-22 16:34:15 | INFO | __main__:<module>:132 - 启动E云管家-DifyAI对接服务
2025-08-26 15:35:24 | INFO | __main__:<module>:132 - 启动E云管家-DifyAI对接服务
2025-08-26 15:55:13 | INFO | __main__:<module>:132 - 启动E云管家-DifyAI对接服务
2025-08-26 16:08:41 | INFO | __main__:<module>:132 - 启动E云管家-DifyAI对接服务
tests/__init__.py
File was deleted
tests/test_api.py
File was deleted
tests/test_dify_streaming.py
File was deleted
tests/test_friend_ignore_service.py
File was deleted
tests/test_message_aggregator.py
File was deleted
tests/test_message_processor.py
File was deleted
tests/test_online_status_monitor.py
File was deleted
tests/test_silence_service.py
File was deleted