From 18c6d2b0dd77b38f487747aad1fcd1218aa8c356 Mon Sep 17 00:00:00 2001
From: yj <2077506045@qq.com>
Date: 星期三, 27 八月 2025 09:19:57 +0800
Subject: [PATCH] 1. 新增测试群组关键字,测试群组名称包含关键字,在其中发言一律不触发静默。

---
 config.py |  205 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 148 insertions(+), 57 deletions(-)

diff --git a/config.py b/config.py
index d7919aa..79c1456 100644
--- a/config.py
+++ b/config.py
@@ -4,6 +4,8 @@
 
 import os
 import json
+import threading
+from loguru import logger
 
 
 class Settings:
@@ -12,95 +14,184 @@
     def __init__(self, config_file: str = "config.json"):
         """鍒濆鍖栭厤缃紝浠嶫SON鏂囦欢鍔犺浇"""
         self.config_file = config_file
+        self._lock = threading.Lock()  # 鐢ㄤ簬绾跨▼瀹夊叏鐨勯厤缃洿鏂�
         self._load_config()
 
     def _load_config(self):
         """浠嶫SON鏂囦欢鍔犺浇閰嶇疆"""
+        if not os.path.exists(self.config_file):
+            raise FileNotFoundError(f"閰嶇疆鏂囦欢 {self.config_file} 涓嶅瓨鍦�")
+
         try:
-            if os.path.exists(self.config_file):
-                with open(self.config_file, 'r', encoding='utf-8') as f:
-                    config_data = json.load(f)
-                self._set_config_from_dict(config_data)
-            else:
-                # 濡傛灉閰嶇疆鏂囦欢涓嶅瓨鍦紝浣跨敤榛樿鍊�
-                self._set_default_config()
+            with open(self.config_file, 'r', encoding='utf-8') as f:
+                config_data = json.load(f)
+            self._set_config_from_dict(config_data)
         except Exception as e:
-            print(f"鍔犺浇閰嶇疆鏂囦欢澶辫触: {e}")
-            self._set_default_config()
+            raise Exception(f"鍔犺浇閰嶇疆鏂囦欢澶辫触: {e}")
 
     def _set_config_from_dict(self, config_data: dict):
         """浠庡瓧鍏歌缃厤缃�"""
         # 鏁版嵁搴撻厤缃�
-        self.database_url = config_data.get("database", {}).get("url", "mysql+pymysql://root:TAI%402019%23Zjun@120.24.39.179:3306/ecloud_dify")
+        self.database_url = config_data["database"]["url"]
 
         # Redis閰嶇疆
-        self.redis_url = config_data.get("redis", {}).get("url", "redis://localhost:6379/0")
+        self.redis_url = config_data["redis"]["url"]
 
         # E浜戠瀹堕厤缃�
-        ecloud_config = config_data.get("ecloud", {})
-        self.ecloud_base_url = ecloud_config.get("base_url", "http://125.122.152.142:9899")
-        self.ecloud_authorization = ecloud_config.get("authorization", "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMzYxMTQ1MjE3NSIsInBhc3N3b3JkIjoiJDJhJDEwJEU3Ry5LOEJzekphM2JGQlh0SG8vOXVrUk1NalVweGVVemguUDRnMkJBdHN2YXpBb0JIQWJpIn0.Gd2vbeJjL5pUGFhUngWPLkDTLhD3GUaEPXOkdoTf4KRh9o2FtST1OZJxmZuGdUy7WIYlIPVueoVyIu5iHOyi8A")
-        self.ecloud_w_id = ecloud_config.get("w_id", "")
+        ecloud_config = config_data["ecloud"]
+        self.ecloud_base_url = ecloud_config["base_url"]
+        self.ecloud_authorization = ecloud_config["authorization"]
+        self.ecloud_w_id = ecloud_config["w_id"]
 
         # DifyAI閰嶇疆
-        dify_config = config_data.get("dify", {})
-        self.dify_base_url = dify_config.get("base_url", "https://api.dify.ai/v1")
-        self.dify_api_key = dify_config.get("api_key", "app-OMnBr7zsf5UTV83Ey8QcSErA")
+        dify_config = config_data["dify"]
+        self.dify_base_url = dify_config["base_url"]
+        self.dify_api_key = dify_config["api_key"]
+        self.dify_streaming_enabled = dify_config["streaming_enabled"]
+        self.dify_streaming_timeout = dify_config["streaming_timeout"]
 
         # 鏈嶅姟閰嶇疆
-        server_config = config_data.get("server", {})
-        self.server_host = server_config.get("host", "0.0.0.0")
-        self.server_port = server_config.get("port", 7979)
-        self.debug = server_config.get("debug", True)
+        server_config = config_data["server"]
+        self.server_host = server_config["host"]
+        self.server_port = server_config["port"]
+        self.debug = server_config["debug"]
 
         # 鏃ュ織閰嶇疆
-        logging_config = config_data.get("logging", {})
-        self.log_level = logging_config.get("level", "INFO")
-        self.log_file = logging_config.get("file", "logs/app.log")
+        logging_config = config_data["logging"]
+        self.log_level = logging_config["level"]
+        self.log_file = logging_config["file"]
 
         # 娑堟伅澶勭悊閰嶇疆
-        msg_config = config_data.get("message_processing", {})
-        self.max_retry_count = msg_config.get("max_retry_count", 3)
-        self.retry_delay = msg_config.get("retry_delay", 5)
-        self.queue_timeout = msg_config.get("queue_timeout", 300)
+        msg_config = config_data["message_processing"]
+        self.max_retry_count = msg_config["max_retry_count"]
+        self.retry_delay = msg_config["retry_delay"]
+        self.queue_timeout = msg_config["queue_timeout"]
 
         # 瀹㈡湇閰嶇疆
-        customer_service_config = config_data.get("customer_service", {})
-        self.customer_service_names = customer_service_config.get("names", ["瀹㈡湇1", "瀹㈡湇2"])
+        customer_service_config = config_data["customer_service"]
+        self.customer_service_names = customer_service_config["names"]
+        self.customer_service_default_name = customer_service_config.get("default_name", "鏅鸿兘瀹㈡湇")
 
-    def _set_default_config(self):
-        """璁剧疆榛樿閰嶇疆"""
-        # 鏁版嵁搴撻厤缃�
-        self.database_url = "mysql+pymysql://root:TAI%402019%23Zjun@120.24.39.179:3306/ecloud_dify"
+        # 濂藉弸蹇界暐閰嶇疆
+        friend_ignore_config = config_data["friend_ignore"]
+        self.friend_ignore_enabled = friend_ignore_config["enabled"]
+        self.friend_ignore_whitelist = friend_ignore_config["whitelist"]
 
-        # Redis閰嶇疆
-        self.redis_url = "redis://localhost:6379/0"
+        # 闈欓粯妯″紡閰嶇疆
+        silence_mode_config = config_data.get("silence_mode", {})
+        self.silence_mode_enabled = silence_mode_config.get("enabled", True)
+        self.silence_duration_minutes = silence_mode_config.get("duration_minutes", 10)
 
-        # E浜戠瀹堕厤缃�
-        self.ecloud_base_url = "http://125.122.152.142:9899"
-        self.ecloud_authorization = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMzYxMTQ1MjE3NSIsInBhc3N3b3JkIjoiJDJhJDEwJEU3Ry5LOEJzekphM2JGQlh0SG8vOXVrUk1NalVweGVVemguUDRnMkJBdHN2YXpBb0JIQWJpIn0.Gd2vbeJjL5pUGFhUngWPLkDTLhD3GUaEPXOkdoTf4KRh9o2FtST1OZJxmZuGdUy7WIYlIPVueoVyIu5iHOyi8A"
-        self.ecloud_w_id = ""
+        # 鍦ㄧ嚎鐘舵�佺洃鎺ч厤缃�
+        online_status_config = config_data["online_status_monitor"]
+        self.online_status_enabled = online_status_config["enabled"]
+        self.online_status_check_interval = online_status_config["check_interval_minutes"]
+        self.online_status_notification_message = online_status_config["notification_message"]
 
-        # DifyAI閰嶇疆
-        self.dify_base_url = "https://api.dify.ai/v1"
-        self.dify_api_key = "app-OMnBr7zsf5UTV83Ey8QcSErA"
+        # 閭欢閫氱煡閰嶇疆
+        email_config = config_data["email_notification"]
+        self.email_enabled = email_config["enabled"]
+        self.email_smtp_server = email_config["smtp_server"]
+        self.email_smtp_port = email_config["smtp_port"]
+        self.email_smtp_username = email_config["smtp_username"]
+        self.email_smtp_password = email_config["smtp_password"]
+        self.email_from_email = email_config["from_email"]
+        self.email_to_emails = email_config["to_emails"]
 
-        # 鏈嶅姟閰嶇疆
-        self.server_host = "0.0.0.0"
-        self.server_port = 7979
-        self.debug = True
+        # 鐭俊閫氱煡閰嶇疆
+        sms_config = config_data["sms_notification"]
+        self.sms_enabled = sms_config["enabled"]
+        self.sms_api_url = sms_config["api_url"]
+        self.sms_username = sms_config["username"]
+        self.sms_password = sms_config["password"]
+        self.sms_phone_numbers = sms_config["phone_numbers"]
 
-        # 鏃ュ織閰嶇疆
-        self.log_level = "INFO"
-        self.log_file = "logs/app.log"
+        # 鍏抽敭璇嶈繃婊ら厤缃�
+        keyword_filter_config = config_data.get("keyword_filter", {})
+        self.keyword_filter_enabled = keyword_filter_config.get("enabled", False)
+        self.keyword_filter_keywords = keyword_filter_config.get("keywords", [])
 
-        # 娑堟伅澶勭悊閰嶇疆
-        self.max_retry_count = 3
-        self.retry_delay = 5
-        self.queue_timeout = 300
+        # 娑堟伅鑱氬悎閰嶇疆
+        message_aggregation_config = config_data.get("message_aggregation", {})
+        self.message_aggregation_enabled = message_aggregation_config.get("enabled", True)
+        self.message_aggregation_timeout = message_aggregation_config.get("timeout_seconds", 15)
 
-        # 瀹㈡湇閰嶇疆
-        self.customer_service_names = ["瀹㈡湇1", "瀹㈡湇2"]
+        # 缁撴潫瀛楃涓查厤缃�
+        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:
+        """
+        鍔ㄦ�佹洿鏂癊浜戠瀹剁殑w_id閰嶇疆
+
+        Args:
+            new_w_id: 鏂扮殑w_id鍊�
+
+        Returns:
+            鏇存柊鎴愬姛杩斿洖True锛屽け璐ヨ繑鍥濬alse
+        """
+        if not new_w_id or new_w_id == self.ecloud_w_id:
+            return True
+
+        with self._lock:
+            try:
+                # 鏇存柊鍐呭瓨涓殑閰嶇疆
+                old_w_id = self.ecloud_w_id
+                self.ecloud_w_id = new_w_id
+
+                # 鏇存柊閰嶇疆鏂囦欢
+                if self._update_config_file_w_id(new_w_id):
+                    logger.info(f"鎴愬姛鏇存柊w_id: {old_w_id} -> {new_w_id}")
+                    return True
+                else:
+                    # 濡傛灉鏂囦欢鏇存柊澶辫触锛屽洖婊氬唴瀛橀厤缃�
+                    self.ecloud_w_id = old_w_id
+                    logger.error(f"鏇存柊閰嶇疆鏂囦欢澶辫触锛屽洖婊歸_id: {new_w_id} -> {old_w_id}")
+                    return False
+
+            except Exception as e:
+                logger.error(f"鏇存柊w_id寮傚父: {str(e)}")
+                return False
+
+    def _update_config_file_w_id(self, new_w_id: str) -> bool:
+        """
+        鏇存柊閰嶇疆鏂囦欢涓殑w_id
+
+        Args:
+            new_w_id: 鏂扮殑w_id鍊�
+
+        Returns:
+            鏇存柊鎴愬姛杩斿洖True锛屽け璐ヨ繑鍥濬alse
+        """
+        try:
+            # 璇诲彇褰撳墠閰嶇疆鏂囦欢
+            with open(self.config_file, 'r', encoding='utf-8') as f:
+                config_data = json.load(f)
+
+            # 鏇存柊w_id
+            config_data["ecloud"]["w_id"] = new_w_id
+
+            # 鍐欏洖閰嶇疆鏂囦欢
+            with open(self.config_file, 'w', encoding='utf-8') as f:
+                json.dump(config_data, f, indent=2, ensure_ascii=False)
+
+            return True
+
+        except Exception as e:
+            logger.error(f"鏇存柊閰嶇疆鏂囦欢w_id澶辫触: {str(e)}")
+            return False
+
+    def get_current_w_id(self) -> str:
+        """
+        鑾峰彇褰撳墠鐨剋_id
+
+        Returns:
+            褰撳墠鐨剋_id鍊�
+        """
+        with self._lock:
+            return self.ecloud_w_id
 
 
 # 鍏ㄥ眬閰嶇疆瀹炰緥

--
Gitblit v1.9.1