mirror of
https://github.com/Nezumi-2711/astrbot_plugin_qq_group_daily_analysis.git
synced 2026-09-22 13:38:43 +00:00
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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user