From 69945b730fd3f6b6138ce50e49fc3392fcd74d71 Mon Sep 17 00:00:00 2001
From: yj <2077506045@qq.com>
Date: 星期一, 28 七月 2025 18:16:52 +0800
Subject: [PATCH] 新增关键词过滤;新增活跃客服统计;新增掉线通知

---
 app/services/message_processor.py |   47 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/app/services/message_processor.py b/app/services/message_processor.py
index e70555a..11b1bf6 100644
--- a/app/services/message_processor.py
+++ b/app/services/message_processor.py
@@ -17,6 +17,8 @@
 from app.services.ecloud_client import ecloud_client
 from app.services.dify_client import dify_client
 from app.services.friend_ignore_service import friend_ignore_service
+from app.services.silence_service import silence_service
+from app.services.group_stats_service import group_stats_service
 from config import settings
 
 
@@ -102,10 +104,34 @@
             logger.warning(f"娑堟伅缂哄皯蹇呰瀛楁: data={data}")
             return False
 
-        # 妫�鏌ュ彂閫佽�呮槸鍚﹀湪濂藉弸蹇界暐鍒楄〃涓�
+        # 鑾峰彇鐢ㄦ埛鍜岀兢缁勪俊鎭�
         from_user = data.get("fromUser")
-        if friend_ignore_service.is_friend_ignored(from_user):
-            logger.info(f"蹇界暐濂藉弸鍙戦�佺殑娑堟伅: fromUser={from_user}")
+        from_group = data.get("fromGroup")
+
+        # 妫�鏌ュ彂閫佽�呮槸鍚﹀湪濂藉弸蹇界暐鍒楄〃涓�
+        is_friend_ignored = friend_ignore_service.is_friend_ignored(from_user)
+
+        if is_friend_ignored:
+            logger.info(f"蹇界暐濂藉弸鍙戦�佺殑娑堟伅: fromUser={from_user}, fromGroup={from_group}")
+            # 缁熻琚拷鐣ョ殑濂藉弸鍙戣█娆℃暟锛堢‘淇濊蹇界暐鐨勫ソ鍙嬫秷鎭篃绾冲叆缁熻锛�
+            group_stats_service.increment_user_message_count(from_group, from_user)
+            # 婵�娲绘垨寤堕暱璇ョ兢缁勭殑闈欓粯妯″紡
+            if silence_service.is_silence_active(from_group):
+                # 濡傛灉璇ョ兢缁勯潤榛樻ā寮忓凡婵�娲伙紝寤堕暱鏃堕棿
+                silence_service.extend_silence_mode(from_group)
+                logger.info(f"濂藉弸娑堟伅琚拷鐣ワ紝缇ょ粍闈欓粯妯″紡鏃堕棿宸插埛鏂�: fromUser={from_user}, fromGroup={from_group}")
+            else:
+                # 濡傛灉璇ョ兢缁勯潤榛樻ā寮忔湭婵�娲伙紝婵�娲婚潤榛樻ā寮�
+                silence_service.activate_silence_mode(from_group)
+                logger.info(f"濂藉弸娑堟伅琚拷鐣ワ紝缇ょ粍闈欓粯妯″紡宸叉縺娲�: fromUser={from_user}, fromGroup={from_group}")
+            return False
+
+        # # 缁熻姝e父澶勭悊鐨勫ソ鍙嬪彂瑷�娆℃暟
+        # group_stats_service.increment_user_message_count(from_group, from_user)
+
+        # 妫�鏌ヨ缇ょ粍鐨勯潤榛樻ā寮忔槸鍚︽縺娲伙紙鍦ㄥソ鍙嬪拷鐣ユ鏌ヤ箣鍚庯級
+        if silence_service.is_silence_active(from_group):
+            logger.info(f"缇ょ粍闈欓粯妯″紡婵�娲讳腑锛屽拷鐣ユ秷鎭�: fromGroup={from_group}")
             return False
 
         return True
@@ -214,12 +240,19 @@
                     logger.error(f"鑱旂郴浜轰俊鎭鐞嗗け璐�: from_group={from_group}")
                     return False
 
-                # 3.2 鑾峰彇鐢ㄦ埛鍦ㄥ綋鍓嶇兢缁勭殑conversation_id
+                # 3.2 鑾峰彇缇ょ粍涓彂瑷�娆℃暟鏈�澶氱殑鐢ㄦ埛鏄电О
+                most_active_nickname = group_stats_service.get_most_active_user_nickname(from_group)
+                logger.info(f"缇ょ粍鏈�娲昏穬鐢ㄦ埛鏄电О: group={from_group}, nickname={most_active_nickname}")
+
+                # 3.3 鑾峰彇鐢ㄦ埛鍦ㄥ綋鍓嶇兢缁勭殑conversation_id
                 conversation_id = redis_queue.get_conversation_id(from_user, from_group)
 
                 # 璋冪敤Dify鎺ュ彛鍙戦�佹秷鎭紙鏍规嵁閰嶇疆閫夋嫨妯″紡锛�
                 dify_response = dify_client.send_message(
-                    query=content, user=from_user, conversation_id=conversation_id
+                    query=content,
+                    user=from_user,
+                    conversation_id=conversation_id,
+                    nick_name=most_active_nickname
                 )
 
                 if not dify_response:
@@ -232,9 +265,9 @@
 
                 # 鏇存柊Redis涓殑conversation_id锛堝熀浜庣敤鎴�+缇ょ粍锛�
                 if new_conversation_id:
-                    redis_queue.set_conversation_id(from_user, new_conversation_id, from_group)
+                    redis_queue.set_conversation_id(from_user, new_conversation_id, from_group, 1800)
 
-                # 3.3 淇濆瓨瀵硅瘽璁板綍鍒版暟鎹簱
+                # 3.4 淇濆瓨瀵硅瘽璁板綍鍒版暟鎹簱
                 # 鎸夌敤鎴枫�佺兢缁勫拰灏忔椂鍒嗙粍瀵硅瘽璁板綍
                 current_time = datetime.now()
                 hour_key = current_time.strftime("%Y%m%d_%H")

--
Gitblit v1.9.1