[feat] 在配置中启用 “偏好使用群昵称“

Merge pull request #24 from Ri-Nai/feature/prefer-to-use-card
This commit is contained in:
Helian Nuits
2025-10-19 12:50:34 +08:00
committed by GitHub
8 changed files with 37 additions and 6 deletions
+6
View File
@@ -38,6 +38,12 @@
"default": "",
"hint": "用于自动分析的机器人QQ号,填写后可启用自动分析功能"
},
"enable_user_card": {
"type": "bool",
"description": "使用用户群名片",
"default": false,
"hint": "在分析中优先使用用户的群名片作为昵称显示"
},
"output_format": {
"type": "string",
"description": "输出格式",
@@ -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(self.config_manager, sender)
msg_time = datetime.fromtimestamp(msg.get("time", 0)).strftime("%H:%M")
for content in msg.get("message", []):
+3 -2
View File
@@ -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(self.config_manager, 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(self.config_manager, sender)
msg_time = datetime.fromtimestamp(msg.get("time", 0)).strftime("%H:%M")
for content in msg.get("message", []):
+2 -1
View File
@@ -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(self.config_manager, sender)
user_stats[user_id]["message_count"] += 1
user_stats[user_id]["nickname"] = nickname
+6 -1
View File
@@ -17,6 +17,8 @@ from .llm_utils import (
extract_response_text
)
from .info_utils import InfoUtils
__all__ = [
# JSON处理工具
'fix_json',
@@ -28,5 +30,8 @@ __all__ = [
# LLM工具
'call_provider_with_retry',
'extract_token_usage',
'extract_response_text'
'extract_response_text',
# 信息工具
'InfoUtils'
]
+13
View File
@@ -0,0 +1,13 @@
class InfoUtils:
@staticmethod
def get_user_nickname(config_manager, sender) -> str:
"""
获取用户昵称
优先使用nickname字段,如果为空则使用card(群名片)字段
"""
enable_user_card = config_manager.get_enable_user_card()
if enable_user_card:
return sender.get("card", "") or sender.get("nickname", "")
else:
return sender.get("nickname", "") or sender.get("card", "")
+4
View File
@@ -197,6 +197,10 @@ class ConfigManager:
self.config["enabled_groups"] = enabled_groups
self.config.save_config()
def get_enable_user_card(self) -> bool:
"""获取是否使用用户群名片"""
return self.config.get("enable_user_card", False)
@property
def pyppeteer_available(self) -> bool:
"""检查pyppeteer是否可用"""
+1 -1
View File
@@ -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(self.config_manager, sender)
# 统计每小时消息数
hourly_activity[hour] += 1