From 7323e1184acf86a5c01e45baf6eb2bc8386a53e5 Mon Sep 17 00:00:00 2001 From: Ri-Nai Date: Sat, 18 Oct 2025 23:20:53 +0800 Subject: [PATCH] =?UTF-8?q?[refactor]=20=E4=BD=BF=E7=94=A8=20InfoUtils=20?= =?UTF-8?q?=E6=8F=90=E5=8F=96=E7=94=A8=E6=88=B7=E6=98=B5=E7=A7=B0=EF=BC=8C?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/analysis/analyzers/golden_quote_analyzer.py | 3 ++- src/analysis/analyzers/topic_analyzer.py | 5 +++-- src/analysis/statistics.py | 3 ++- src/utils/__init__.py | 4 +++- src/utils/info_utils.py | 9 +++++++++ src/visualization/activity_charts.py | 2 +- 6 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 src/utils/info_utils.py diff --git a/src/analysis/analyzers/golden_quote_analyzer.py b/src/analysis/analyzers/golden_quote_analyzer.py index 6b15476..050780a 100644 --- a/src/analysis/analyzers/golden_quote_analyzer.py +++ b/src/analysis/analyzers/golden_quote_analyzer.py @@ -9,6 +9,7 @@ from astrbot.api import logger from ...models.data_models import GoldenQuote, TokenUsage from .base_analyzer import BaseAnalyzer from ..utils.json_utils import extract_golden_quotes_with_regex +from ...utils import InfoUtils @@ -147,7 +148,7 @@ class GoldenQuoteAnalyzer(BaseAnalyzer): for msg in messages: sender = msg.get("sender", {}) - nickname = sender.get("nickname", "") or sender.get("card", "") + nickname = InfoUtils.get_user_nickname(sender) msg_time = datetime.fromtimestamp(msg.get("time", 0)).strftime("%H:%M") for content in msg.get("message", []): diff --git a/src/analysis/analyzers/topic_analyzer.py b/src/analysis/analyzers/topic_analyzer.py index e31ff91..50b9bef 100644 --- a/src/analysis/analyzers/topic_analyzer.py +++ b/src/analysis/analyzers/topic_analyzer.py @@ -10,6 +10,7 @@ from astrbot.api import logger from ...models.data_models import SummaryTopic, TokenUsage from .base_analyzer import BaseAnalyzer from ..utils.json_utils import extract_topics_with_regex +from ...utils import InfoUtils class TopicAnalyzer(BaseAnalyzer): @@ -71,7 +72,7 @@ class TopicAnalyzer(BaseAnalyzer): logger.warning(f"build_prompt 跳过sender非字典类型的消息: {type(sender)} - {sender}") continue - nickname = sender.get("nickname", "") or sender.get("card", "") + nickname = InfoUtils.get_user_nickname(sender) msg_time = datetime.fromtimestamp(msg.get("time", 0)).strftime("%H:%M") message_list = msg.get("message", []) @@ -297,7 +298,7 @@ class TopicAnalyzer(BaseAnalyzer): logger.warning(f"extract_text_messages 跳过sender非字典类型的消息: {type(sender)} - {sender}") continue - nickname = sender.get("nickname", "") or sender.get("card", "") + nickname = InfoUtils.get_user_nickname(sender) msg_time = datetime.fromtimestamp(msg.get("time", 0)).strftime("%H:%M") for content in msg.get("message", []): diff --git a/src/analysis/statistics.py b/src/analysis/statistics.py index 2292268..9a9a9ac 100644 --- a/src/analysis/statistics.py +++ b/src/analysis/statistics.py @@ -6,6 +6,7 @@ from datetime import datetime from typing import List, Dict from collections import defaultdict +from ..utils import InfoUtils class UserAnalyzer: @@ -28,7 +29,7 @@ class UserAnalyzer: for msg in messages: sender = msg.get("sender", {}) user_id = str(sender.get("user_id", "")) - nickname = sender.get("nickname", "") or sender.get("card", "") + nickname = InfoUtils.get_user_nickname(sender) user_stats[user_id]["message_count"] += 1 user_stats[user_id]["nickname"] = nickname diff --git a/src/utils/__init__.py b/src/utils/__init__.py index c70fe49..5e00fa4 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -5,8 +5,10 @@ from .pdf_utils import PDFInstaller from .helpers import MessageAnalyzer +from .info_utils import InfoUtils __all__ = [ 'PDFInstaller', - 'MessageAnalyzer' + 'MessageAnalyzer', + 'InfoUtils' ] \ No newline at end of file diff --git a/src/utils/info_utils.py b/src/utils/info_utils.py new file mode 100644 index 0000000..30b0405 --- /dev/null +++ b/src/utils/info_utils.py @@ -0,0 +1,9 @@ +class InfoUtils: + @staticmethod + def get_user_nickname(sender) -> str: + """ + 获取用户昵称 + + 优先使用nickname字段,如果为空则使用card(群名片)字段 + """ + return sender.get("nickname", "") or sender.get("card", "") diff --git a/src/visualization/activity_charts.py b/src/visualization/activity_charts.py index 63d921d..90945aa 100644 --- a/src/visualization/activity_charts.py +++ b/src/visualization/activity_charts.py @@ -30,7 +30,7 @@ class ActivityVisualizer: # # 用户分析 # sender = msg.get("sender", {}) # user_id = str(sender.get("user_id", "")) - # nickname = sender.get("nickname", "") or sender.get("card", "") + # nickname = InfoUtils.get_user_nickname(sender) # 统计每小时消息数 hourly_activity[hour] += 1