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