Commit Graph
155 Commits
Author SHA1 Message Date
SXP-Simon b88082f662 fix(README): BA 模板展示图 2026-07-21 14:56:57 +08:00
clown145andSXP-Simon f2bcd6801e [v4.11.1] - 🛠️ 修复 QQ 官方机器人昵称与提及清洗 (#207)
Fix QQ official nickname and mention handling 

* fix: restore QQ official nicknames and sanitize mentions

* fix: protect QQ official identities and whitespace

* docs: update QQ official nickname guidance

* chore: bump version to v4.11.1

* docs: remove obsolete PDF guidance

* chore: finalize v4.11.1 release prep

* fix(qqofficial): 修复 _sanitize_qq_official_mentions .strip() 吞换行,补充 allow_alphanumeric_user_ids 注释

- .strip() → .strip(' \t'):仅清除首尾空白/制表符,保留用户创作的 \n 换行
- allow_alphanumeric_user_ids:在参数定义处补充注释,说明该标记还控制 ID 正则化和回退显示名
- 响应 Sourcery 代码审查 #207 指出的问题

* chore:  删除不必要的描述

---------

Co-authored-by: SXP-Simon <sxp20061207@163.com>
2026-07-21 14:53:31 +08:00
SXP-Simon 20019baa2c fix(README): 删除过期的描述,调整 BA 模板展示图 2026-07-20 14:57:01 +08:00
clown145andSXP-Simon c18224cb82 [v4.11.0] - 新增 QQ 官方机器人群聊分析与专用 Markdown 报告 (@clown145 #206)
* feat: add QQ official bot group analysis support

* fix: use text progress replies for QQ official bot

* fix: harden QQ official proactive reporting

* feat: enhance QQ official markdown reports

* refactor: isolate QQ official markdown reporting

* fix: restore platform adapter exports

* style: format QQ official changes

* fix(main): 添加 html_render 类型声明和 Callable 导入

为 self.html_render 属性添加显式类型声明,解决定时任务中可能因缺少类型注解导致的隐式错误。

* fix(analysis): 消除 execute_daily_analysis 中重复的 bot_self_ids 赋值

去除第二次冗余的 config_manager.get_bot_self_ids() 调用,直接复用已获取的变量。

* cleanup(domain): 移除未使用的分析器适配器和死代码服务文件

删除 golden_quote_analyzer.py、topic_analyzer.py、user_title_analyzer.py(均为未被引用的接口+适配器包装)report_generator.py(旧的文本报告生成器)statistics_calculator.py(与 StatisticsService 功能重复)更新 domain/services/__init__.py 移除对上述文件的引用。

* cleanup(domain): 移除冗余的实体和值对象文件,收敛数据模型至 domain/models/data_models.py

删除 analysis_result.py(与 data_models.py 重复的 SummaryTopic/UserTitle/GoldenQuote 等类定义)value_objects/golden_quote.py、statistics.py、topic.py、user_title.py(均为未被引用的 frozen dataclass 迁移残留)。所有活跃代码已统一导入 domain/models/data_models.py。

* refactor(llm): 抽取 _make_session_id 辅助方法消除重复代码

在 5 个方法(analyze_topics、analyze_user_titles、analyze_golden_quotes、analyze_all_concurrent、analyze_incremental_concurrent)中出现完全相同的 datetime.now().strftime(...) + umo 拼接逻辑,已提取为 _make_session_id 静态方法。

* refactor(message): 正则表达式提升为模块级常量避免重复编译

DISCORD_CUSTOM_EMOJI_PATTERN 和 COMMAND_PATTERN 从类属性移至模块级常量,避免每次实例化 MessageCleanerService 时重新编译正则。

* arch(domain): 定义 IActivityVisualizer 接口并通过依赖注入消除领域层反向依赖

创建 IActivityVisualizer 接口于 domain/repositories/visualization_repository.py,StatisticsService 改由依赖注入接收该接口;ActivityVisualizer 继承接口。消除原 StatisticsService 直接 import infrastructure.visualization 的 DDD 违规。

* fix(main): 补全 Callable 导入和 html_render 类型声明

初次提交(877adb6)因 git add -p 交互式分块时 BOM 导致错误的 hunk 被暂存,Callable 导入和 html_render 类型声明丢失。本次补全这两项修改。

* fix(platform): 补充 QQOfficialAdapter、TelegramAdapter、DiscordAdapter 导出

* refactor(main): 提取内嵌的文本报告生成/发送函数为独立类方法

将 _send_analysis_report 方法中的 generate_text_reports() 和 send_text_reports() 内嵌异步函数提取为 _generate_text_reports 和 _send_text_reports 私有方法。减少闭包复杂度,提升可维护性。

* cleanup(config): 移除废弃的 get_qq_official_t2i_activity_histogram_enabled 向后兼容方法

删除 config_manager.py 中的旧名别名方法,简化 qq_official_markdown.py 中对应的 getattr 回退逻辑为直接方法调用,移除测试中专门验证旧名兼容性的 LegacyDisabledConfig 测试用例。该兼容层仅在迁移期间临时存在,现已完成过渡。

* fix(types): 修复 Pylance 类型告警 — platform_key 未绑定、int(object) 和 template.filename 可能为 None

platform_group_registry.py: 将 platform_key 定义提前,消除 Pylance reportPossiblyUnboundVariable 告警。
qq_official_markdown.py: 将 int(value or 0) 改为 int(value) if value is not None else 0,消除 reportArgumentType 告警。
templates.py: 在使用 template.filename 前增加 None 检查,消除 str|None 不可分配给 str 的告警。
qq_official_adapter.py: 为 post_group_message 添加类型忽略注解,消除 await 不可等待对象的告警。

* fix(types): 修复残留的 Pylance 类型告警

platform_group_registry.py: 将 (platform_key, group_id) 改为 (str(platform_key), group_id),消除 str|None 不可分配给 str 的 reportArgumentType
qq_official_markdown.py: int(value) 添加 # type: ignore[arg-type],消除 object 不可分配给 ConvertibleToInt
qq_official_adapter.py: 移除无意义的中间变量,await 行直接添加 # type: ignore[arg-type]

* docs(message): 更新 MessageProcessingService 的文档和注释,消除 Telegram 特殊性表述

类 docstring:移除 '维护 Telegram 群组注册表' 等过时描述,补充 QQ 官方去重职责。
group_registry.upsert 注释:改为泛化的跨平台描述,不再限定 Telegram。
_extract_event_timestamp / _reserve_event_id / _commit_event_id / _release_event_id:英文 docstring 统一为中文。

* docs(message): 修正类注释中只提 QQ 官方的问题,明示 Telegram 也由本服务处理

Telegram 和 QQ 官方消息都经过 MessageProcessingService.process_message()。修正前类 docstring 只提了 QQ 官方的事件去重,缺少 Telegram 作为主要调用者的说明。

* fix(types): 修正 _sanitize_analysis_result_for_export 返回类型注解

函数声明 -> dict 但 _sanitize_export_identity_text 可返回 str|dict|list,Pylance 报 reportReturnType。
改为 -> dict[str, Any] 准确表达实际返回类型,补充缺失的 from typing import Any。

* fix(types): 抑制 Pylance reportReturnType 误报

_sanitize_analysis_result_for_export 的 analysis_result 参数运行时始终为 dict,但 _to_plain_export_data 递归返回 Any 导致 Pylance 推导出 str|dict|list 联合类型。
添加 # type: ignore[return-type] 抑制此误报。

* fix(report): 渲染匿名模式下的未知引用 token 不再静默丢弃

当 hide_user_names=True 且 [id] 不在 known_ids 中时,之前返回空 Markup 导致 token 被静默移除,可能扭曲文本语义。改为返回转义后的原始 [id] 字符串,保留文本布局和语义,同时不泄露身份信息。
参考 Sourcery AI code review 建议。

* fix(import): 避免从 astrbot.core 直接导入 File,优先使用公开 API

astrbot.core 是内部模块,不在公开 API 契约中,可能随版本变化。
改为 try 优先导入 astrbot.api.message_components.File(公开 API),
失败时回退到 astrbot.core.message.components.File(向后兼容)。
同时修复 main.py 和 qq_official_adapter.py 两处导入。

* fix(import): 回退 try/except 伪装,改为直接导入 + 风险注释

astrbot.api.message_components 不存在,try/except 永远走 except 分支,是无效代码。
改为直接 from astrbot.core.message.components import File,用注释说明这是内部 API 可能变化。

* fix(ruff): 代码质量

* docs(README): 调整文档说明,删除 lark 相关的描述和功能标识

* docs(desc): 更新 desc

* fix(message): 将 TG 和 QQ 官方消息缓存成功日志降为 debug

* perf(message): 将 _extract_event_timestamp 延迟到 QQ 官方分支内计算

该时间戳仅用于 QQ 官方消息的 history_content 元数据,但对所有平台都执行了深度 getattr 链。
改为只在 QQ 官方分支内延迟计算,消除 Telegram 等平台上每次消息的白算开销。

* chore(CHANGELOG)

---------

Co-authored-by: SXP-Simon <sxp20061207@163.com>
2026-07-20 03:24:50 +08:00
SXP-Simon 6b2d4b1dc3 [v4.10.9] - 新增模板 ”BlueArchive“ 蔚蓝档案 (@VanillaNahida) 2026-07-12 22:20:51 +08:00
香草味的纳西妲喵 a36d339f0f feat: 新增模板 ”BlueArchive“ 蔚蓝档案 (#196)
* feat: 新增渲染模板”BlueArchive“(蔚蓝档案)

* 修复图片无法显示
2026-07-12 12:21:23 +08:00
SXP-Simon 06fb17bdc2 [v4.10.8] - 🛠️ snowluma 被禁言避免触发分析修复 (#191) 2026-07-10 20:32:34 +08:00
SXP-Simon 3979a30787 [v4.10.7] - 被禁言避免触发分析功能浪费 token,重构并优化模型请求的重试与降级补偿机制 2026-07-10 15:34:13 +08:00
SXP-Simon 27f0e9e838 [v4.10.6] - 支持 [SnowLuma](https://github.com/SnowLuma/SnowLuma) ,优化 HatsuneMiku 移动端适配情况 2026-05-23 16:46:35 +08:00
SXP-Simon 1a3d079535 [v4.10.5] - 支持可选流式 LLM 调用 (#181 @anchorAnc) 2026-05-01 18:37:44 +08:00
Helian Nuits fd51b4e399 fix(readme): readme 飞书接入情况说明
Updated Feishu / Lark integration section to indicate it is a work in progress.
2026-04-29 20:52:07 +08:00
SXP-Simon 9e0f88eeda [v4.10.4] - 🛠️ 将镜像地址配置注入到子模板渲染上下文中,解决 ATRI 子模板中变量未定义导致的生成问题 2026-04-27 17:12:29 +08:00
SXP-Simon 09b4d188f2 fix(typo): T2I 文档 2026-04-26 21:22:50 +08:00
SXP-SimonandCopilot ec2249b9a7 [v4.10.3] - 优化报告模板中的头像与内联图片复用,并修复 Miku 峰值区块窄屏排版问题 (#178 @lekoOwO)
Co-authored-by: Copilot <copilot@github.com>
2026-04-26 14:41:07 +08:00
SXP-SimonandCopilot bb04114cdb [v4.10.2] - Telegram 头像处理修复,支持多地区渲染环境与自定义镜像
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 12:35:18 +08:00
SXP-Simon e48716dbf8 [v4.10.1] - 优化 T2I 渲染与自定义配置 2026-04-23 08:53:51 +08:00
SXP-Simon fc843fac03 feat: 优化 T2I 渲染与自定义配置
1. 支持配置两轮 T2I 渲染策略,允许用户自定义图片格式(PNG/JPEG)、质量、分辨率及超时时间。
2. 实现 T2I 返回 HTML 错误页的自动识别与摘要提取(如 502 Bad Gateway),提升故障排查效率。

- 参考 #174 关于 T2I 动态超时与配置的建议
- 参考 #171 关于处理 T2I 返回 HTML 错误信息的建议
- 解决了 [Feature Request] 支持配置 PNG/JPEG 渲染优先级,避免大报告场景下因本地大图保护而回退为文件发送 #164
2026-04-23 08:43:51 +08:00
SXP-Simon d36bf4941a [v4.9.18] - ⚙️ base64 传输统一开关修复,正确处理 Onebot Adapter 的图片、文件资源传输情况 2026-04-15 23:19:51 +08:00
SXP-Simon cc162b62dd [v4.9.17] - 人格画像体验升级,SBTI 和 ACGTI 风格 2026-04-13 22:37:24 +08:00
SXP-Simon 45c9ca9bea [v4.9.16] - 增加了html_only_url选项,使在选择输出格式为html时可以单独发送BaseURL (#166 @shiitin) 2026-04-12 22:08:49 +08:00
SXP-Simon 937f4e1782 [v4.9.15] - fix: 发送假超时不应该导致上传群相册群文件失败,删除 PDF 模块和相关的功能 2026-04-07 22:30:20 +08:00
SXP-Simon ae38febca2 fix(pdf): 删除 PDF 模块和相关的功能 2026-04-07 22:17:09 +08:00
SXP-Simon b1c85d8994 [v4.9.14] - feat(persona): 分析器人格增强和使用体验优化,可视化选择人格配置 2026-04-04 21:26:31 +08:00
SXP-Simon 92a365475c feat(persona): 人格设定功能增强,支持插件指定和会话继承的人格分析 2026-04-04 19:40:30 +08:00
SXP-Simon 0c1d9cff72 fix typo 2026-04-03 15:00:40 +08:00
SXP-Simon 45988cf419 [v4.9.13] - feat(ATRI): ATRI 模板 (@Liangyu-G) 2026-04-03 14:32:02 +08:00
SXP-Simon 5dd7cf1aa1 [v4.9.12] - 移除无效的重试器 2026-04-02 17:52:36 +08:00
SXP-Simon e503e7ad63 [v4.9.11] - feat(HTML): HTML 报告与自建外链吗,将群分析变成可以点击跳转的精美网页链接 2026-04-01 22:19:00 +08:00
SXP-Simon 1fa1ebe5ca [v4.9.10] - fix: 解决 TG 未贴表情的 bug,HTML 输出模式,优化渲染 2026-03-31 21:17:31 +08:00
SXP-Simon b041a7ca9e [v4.9.9] - feat(feishu): 尝试接入飞书并且回退黑白名单逻辑,保持旧版本逻辑,插件统一管理 2026-03-29 01:08:00 +08:00
SXP-Simon 0cba280a82 feat(feishu): 尝试接入飞书 2026-03-29 00:29:37 +08:00
SXP-Simon 6d40745e79 [v4.9.8] - feat(HatsuneMiku): 新增了一个名为 HatsuneMiku 的模板 (#134 @Shiitin) 2026-03-28 22:45:47 +08:00
SXP-Simon 4200631f17 fix(HatsuneMiku): 完善 2026-03-28 21:18:50 +08:00
Shiitin ae96ea9c93 新增了一个名为HatsuneMiku的模板 (#134)
* Add HatsuneMiku template with a placeholder file

* Add files via upload

* Delete src/infrastructure/reporting/templates/HatsuneMiku/nothing

* Add files via upload

* 重新替换了所有文件并增加了之前忘记的PDF模板文件

* Add files via upload

* 将Spring Festival模板预览图替换HatsuneMiku模板预览图

* 更改了HatsuneMiku模板的预览图片的引用方式

* 将HatsuneMiku模板的地址替换为国内可以访问的中转
2026-03-28 12:25:19 +08:00
SXP-Simon 03f2f066b3 fix typo 2026-03-27 13:01:27 +08:00
SXP-Simon b29327674f [v4.9.7] - feat(分析配置细粒度化): 引入三层黑白名单机制(基础群分析开关、定时分析、增量分析),支持更细粒度的群级分析控制;修复自动分析生命周期管理情况避免任务被静默跳过 2026-03-26 23:32:32 +08:00
SXP-Simon 9ed4771730 feat: 完善自动分析名单调度与面板配置说明
- 重构自动分析调度流程:以分层名单解析目标群组,统一报告入口,并按群组模式分发传统/增量任务。

- 新增定时名单与增量名单配置能力:补充 scheduled_group_list(_mode)、incremental_group_list(_mode)、incremental_fallback_enabled。

- 优化失败兜底策略:增量最终报告在超时、异常或无有效结果时,可回退至传统全量分析。

- 完善配置与文档说明:在 _conf_schema.json 与 README 中补充面板操作指引、判定顺序与边界场景说明。

- 兼容旧配置行为:保留废弃接口,并在配置管理中统一名单匹配语义(UMO/群号兼容)。
2026-03-26 19:23:49 +08:00
SXP-Simon 90908cefcb [v4.9.6] - fix(provider): 优化 PDF 模板生成情况,基础设施健壮性增强 2026-03-25 17:43:35 +08:00
SXP-Simon 58615d2752 fix(scrapbook): pdf 版本排版调整 2026-03-25 15:46:38 +08:00
SXP-Simon 2120800abd [v4.9.5] - fix(chat_quality_analysis 模块): 优化增量分析逻辑,优化提示词 2026-03-23 17:28:17 +08:00
SXP-Simon 91692170a0 [v4.9.4] - feat(chat_quality_analysis 模块): 新增群聊质量锐评功能(灵感来源:感谢 @Nagi-ovo) 2026-03-23 00:53:05 +08:00
SXP-Simon 5701599a14 feat: 同步更新其他模板 2026-03-23 00:42:18 +08:00
SXP-Simon 51d14dad0b [v4.9.3] - feat(增量分析): 更新增量分析配置,增加安全上限并优化消息拉取逻 2026-03-21 00:54:00 +08:00
SXP-Simon b2101c3a15 fix(assets): 使用 fastly.jsdelivr.net cdn 实现呈现插件文档页面的图片 2026-03-21 00:13:42 +08:00
SXP-Simon f3f93a96c4 fix typo 2026-03-20 21:07:03 +08:00
SXP-Simon 3b8e2b85ba [v4.9.2] - feat(reaction): 将文字反馈调整为表情反馈 2026-03-19 15:14:33 +08:00
SXP-Simon a71a0a34db [v4.9.1] - feat(persona): 添加分析人格设定的配置选项,并更新相关提示词构建逻辑 2026-03-16 23:49:04 +08:00
clown145 30f68162e6 docs(readme): 优化 T2I 服务说明,添加折叠及 AstrBot 配置说明 (#113) 2026-03-16 02:13:34 +08:00
SXP-Simon 02bacd3389 [v4.9.0] - fix(telegram): 增强 telegram 平台的插件可用性 2026-03-16 01:03:21 +08:00
SXP-Simon 2e62c09266 fix(readme): 增加 t2i 链接 2026-03-16 00:51:15 +08:00