refactor: 报告中的群员头像重构为 diskcache 缓存,过期时间3天;优化代码可读性; (#118 @oculr)

* refactor: 报告中的群员头像重构为diskcache缓存,过期时间3天;优化代码可读性;

* refactor: 进一步优化头像处理逻辑与资源管理生命周期

- **头像处理性能优化**:
  - 将 Base64 转换重构为同步方法,消除微型 CPU 计算任务的异步上下文切换开销。
  - 增强图片 MIME 类型识别能力,通过分析文件头支持 WebP 和 JPEG 魔数检测。
  - 改善下载失败处理:移除了失败结果的持久化缓存(Negative Caching),确保在网络波动恢复后能自动重新尝试获取。
- **资源与生命周期管理**:
  - 完善插件终止流程:增加了显式的缓存关闭逻辑,并与插件卸载钩子集成,确保正确释放持久化层的文件句柄。
- **鲁棒性与调试增强**:
  - 加强对第三方头像获取器返回值的 URL 协议校验,并补充了相应的警告日志。
  - 优化了 Base64 转换等环节的异常日志记录格式,增加了对堆栈追踪的支持。
- **代码整洁度**:
  - 统一并清理了重复的模块导入,移除了方法内部冗余的库导入。
  - 全量应用 Ruff 格式化规范,优化了导入顺序及整体代码布局。

---------

Co-authored-by: SXP-Simon <sxp20061207@163.com>
This commit is contained in:
oculr
2026-03-22 23:36:28 +08:00
committed by GitHub
co-authored by SXP-Simon
parent 51d14dad0b
commit f40243492f
3 changed files with 140 additions and 127 deletions
+9 -5
View File
@@ -14,7 +14,7 @@ from astrbot.api import AstrBotConfig
from astrbot.api import logger as astrbot_logger
from astrbot.api.event import AstrMessageEvent, filter
from astrbot.api.event.filter import PermissionType
from astrbot.api.star import Context, Star
from astrbot.api.star import Context, Star, StarTools
from astrbot.core.message.components import File
from .src.application.commands.template_command_service import (
@@ -83,7 +83,9 @@ class GroupDailyAnalysis(Star):
self.bot_manager.set_context(context)
self.bot_manager.set_plugin_instance(self)
self.history_manager = HistoryManager(self)
self.report_generator = ReportGenerator(self.config_manager)
self.report_generator = ReportGenerator(
self.config_manager, StarTools.get_data_dir()
)
# Telegram 注册表 (持久层)
self.telegram_group_registry = TelegramGroupRegistry(self)
@@ -252,6 +254,8 @@ class GroupDailyAnalysis(Star):
# 3. 释放实例属性引用 (使用 type: ignore 允许 None 赋值)
self.auto_scheduler = None # type: ignore
self.bot_manager = None # type: ignore
if self.report_generator:
self.report_generator.close()
self.report_generator = None # type: ignore
self.config_manager = None # type: ignore
self.message_processing_service = None # type: ignore
@@ -547,7 +551,7 @@ class GroupDailyAnalysis(Star):
output_format = self.config_manager.get_output_format()
# 定义获取回调
async def avatar_getter(user_id: str) -> str | None:
async def avatar_url_getter(user_id: str) -> str | None:
return await adapter.get_user_avatar_url(user_id)
async def nickname_getter(user_id: str) -> str | None:
@@ -564,7 +568,7 @@ class GroupDailyAnalysis(Star):
analysis_result,
group_id,
self.html_render,
avatar_getter=avatar_getter,
avatar_url_getter=avatar_url_getter,
nickname_getter=nickname_getter,
)
@@ -592,7 +596,7 @@ class GroupDailyAnalysis(Star):
pdf_path = await self.report_generator.generate_pdf_report(
analysis_result,
group_id,
avatar_getter=avatar_getter,
avatar_url_getter=avatar_url_getter,
nickname_getter=nickname_getter,
)
if pdf_path: