Commit Graph
100 Commits
Author SHA1 Message Date
SXP-Simon e78c827857 feat(RetryManager): 新增图片报告重试机制并优化调度稳定性
新增重试管理器 (src/scheduler/retry.py):
实现基于内存的延迟队列与死信队列,支持指数退避 + 随机抖动 (Jitter) 重试策略。
增强容错性:处理渲染服务宕机、网络超时及 Bot API 逻辑错误 (如 retcode=1200)。
兼容性优化:使用 call_action 通用接口适配 OneBot v11。
生命周期管理:增加自动启动保护,防止任务丢失。
2026-01-17 23:39:17 +08:00
SXP-Simon 7c3a86fdff fix(pre-commit): code quality 2026-01-17 00:04:14 +08:00
SXP-Simon 7450d76178 fix(pre-commit): code quality 2026-01-16 23:59:45 +08:00
SXP-Simon 8270bf994f [v4.6.1] Linux 下的 /安装PDF 指令简易修复,纠正头像获取的处理;PDF 格式在 Linux 环境下占用过大,原因还在排查中,暂时不推荐使用 2026-01-16 23:49:31 +08:00
SXP-Simon b3a39f1f6c fix(reports): 修复 generators.py 中 _get_user_avatar 的 TypeError。将 aiohttp 请求重构为异步上下文模式,确保 response.read() 被正确等待,并增加了网络连接失败处理 2026-01-16 23:43:46 +08:00
SXP-Simon c54d001f2a fix: 初步完成 PDF 生成,后续继续排查优化 2026-01-16 23:41:13 +08:00
SXP-Simon eeb9461c2f fix(PDFInstaller): 字体处理和友好提示 2026-01-16 21:06:43 +08:00
SXP-Simon b1c889343c fix(PDFInstaller): linux 环境下的安装 PDF 命令修复 2026-01-16 20:30:58 +08:00
SXP-Simon 0b6f2b6969 [v4.6.0] 通过 AstrBot 配置文件来判断账号启用插件 (#72) 2026-01-16 18:39:27 +08:00
SXP-Simon 9ee0662484 fix(is_plugin_enabled): 检查该平台是否包含该插件的配置文件 plugin_set,通过 AstrBot 配置文件来判断账号启用插件
解决关联 issue
`[Bug] 定时分析会直接检测某个群所有支持的平台,而不会检查该平台是否包含该插件的配置文件 #72`
2026-01-16 18:31:03 +08:00
SXP-Simon fb65d14d9d chore(CHANGELOG.md): 更新日志 2026-01-13 16:54:59 +08:00
SXP-Simon 89bb78640d chore(assets): 更新 scrapbook 示例排版图 2026-01-13 16:35:41 +08:00
SXP-Simon 76c5157f30 [v4.5.8] 群贤毕至添加头像 2026-01-13 16:32:36 +08:00
SXP-Simon fd5d4b978d feat(scrapbook): 群贤毕至添加头像 2026-01-13 16:29:34 +08:00
SXP-Simon 131a411a70 [4.5.7] scrapbook 模板 footer 的 token 描述调整,仓库地址更新 2026-01-13 15:27:04 +08:00
SXP-Simon 3f1e406670 fix: 调整排版
- feat(template): scrapbook footer 使用更全面的 token 描述
- chore(template): 仓库名称
2026-01-13 15:22:01 +08:00
SXP-Simon 3e62f5d879 [v4.5.6] 更新 scrapbook 模板排版 2026-01-07 16:51:23 +08:00
SXP-Simon 4b4f4545db feat(scrapbook): 更新 scrapbook 模板 2026-01-07 16:50:29 +08:00
SXP-Simon 251eb2ca0d [v4.5.5] 性能优化,CPU 密集型计算(统计和分析)已卸载到各线程池,避免阻塞事件循环;修复 Jinja2 模板渲染线程安全问题 2026-01-07 00:38:11 +08:00
SXP-Simon 022dd77ea9 fix(thread-safety): 已为
templates.py
 中的 Jinja2 环境缓存添加线程安全保护,具体改动如下:

 使用双重检查锁定(Double-Checked Locking)保护缓存访问
读取缓存时加锁,避免多线程同时读取时的数据竞争
创建新环境后再次加锁检查,防止高并发下重复创建相同模板的环境

原代码中 _envs 字典会通过 asyncio.to_thread(self._get_env_sync) 被多个线程同时访问和修改,存在数据竞争风险。现在通过 threading.Lock 确保了线程安全。
2026-01-07 00:35:40 +08:00
SXP-Simon 3840e84b93 Merge branch 'main' of github.com:SXP-Simon/astrbot-qq-group-daily-analysis 2026-01-07 00:30:14 +08:00
SXP-Simon 2af39fa3b5 fix(debug): 删除一些不必要的 debug 调试 2026-01-07 00:28:35 +08:00
SXP-Simon 3ca7f71376 fix(typo): 调整文档 2026-01-07 00:28:35 +08:00
SXP-Simon 9a09e56f13 fix: 性能优化,CPU 密集型计算(统计和分析)已卸载到各线程池,避免阻塞事件循环
feat: 存储路径规范化:PDF 报告现在存储在 data/plugin_data/astrbot_plugin_qq_group_daily_analysis/reports
2026-01-07 00:28:35 +08:00
SXP-Simon 4297bf4f99 refactor: 全局变量重构,受保护成员访问修复,同步 I/O 操作异步化 2026-01-07 00:28:35 +08:00
SXP-Simon 5b72997a28 refactor: 全局变量重构,受保护成员访问修复,同步 I/O 操作异步化 2026-01-06 23:07:03 +08:00
SXP-Simon 64ae5e1a6d [v4.5.4] 更新插件 metadata 描述,为了使用户更容易搜索到此插件,重新在插件市场提交 2026-01-06 22:20:55 +08:00
SXP-Simon c562cd49ca fix(typo): metadata 2026-01-06 22:14:02 +08:00
Helian Nuits d1a3de9e21 [v4.5.3] 更新版本号,处理 rebase 合并 PR 导致自动 release 发版 workflow 失效的问题 2026-01-03 01:34:09 +08:00
Helian Nuits f458bcfefa [v4.5.2] 添加查看模板指令,合并转发模板图片供用户查看,优化选择模板命令 (@clown145) 2026-01-03 01:30:52 +08:00
SXP-Simon 099421931e fix(typo): 增加 readme 新模板 retro_futurism 演示 2025-12-31 14:50:21 +08:00
SXP-Simon d339f1b7c0 [v4.5.0] 添加新的模板主题 retro_futurism, 灵感来源明日方舟 孤星 未来复古主义主题;添加模板调试工具 scripts/debug_render.py,方便用户在不启动 AstrBot 的情况下调试模板效果 (@Saramanda9988) 2025-12-31 14:44:23 +08:00
SXP-Simon 4ca8180933 [v4.4.0] 修复可能的图片生成成功但是发送失败的情况,增加 Fallback 的 BASE64 编码的图片发送方式 @Heximiao 2025-12-20 21:10:56 +08:00
SXP-Simon c216ccb009 fix(auto_scheduler): 设置请求超时和响应大小限制,避免卡死或下载过大,增加过程的健壮性 2025-12-20 21:01:55 +08:00
SXP-Simon 8f107f6c05 [v4.3.0] 纠正关闭特定分析区但是基础样式没有去除的 bug 2025-11-29 00:19:02 +08:00
SXP-Simon 23ca2f9ade fix(simple): 提取排版,纠正关闭分析分区但是基础样式没有去除的 bug 2025-11-29 00:07:14 +08:00
SXP-Simon 122a2fa36a fix(scrapbook): 提取排版,纠正关闭分析分区但是基础样式没有去除的 bug 2025-11-29 00:04:53 +08:00
SXP-Simon 3d6378792e fix(format): 提取排版,纠正关闭分析分区但是基础样式没有去除的 bug 2025-11-29 00:04:36 +08:00
SXP-Simon 964f8478ea [v4.2.7] 模板文档更新 2025-11-26 13:07:49 +08:00
SXP-Simon 0d62985e51 fix(template/simple): 纠正 simple 符合规范 2025-11-26 12:48:16 +08:00
SXP-Simon a81640c289 [v4.2.6] fix(延迟启动调度器失败): 'xxxPlatformAdapter' object has no attribute 'metadata' 2025-11-26 00:42:40 +08:00
SXP-Simon 1a08d6cb59 fix(延迟启动调度器失败): PlatformAdapter' object has no attribute 'metadata' 2025-11-26 00:35:04 +08:00
SXP-Simon bb124a96f6 [v4.2.5] 正确获取 platform_id 2025-11-25 23:42:41 +08:00
Helian Nuits 03c35f49d0 Fix(bot manager): _get_platform_id_for_group 是一个异步方法(async def),但在 main.py 中调用时忘记加 await (#54)
* fix(bot-manager): 正确处理实例获取

* fix(import); AiocqhttpAdapter 导入

* fix: 通过 meta 实现 aiocqhttp 判断

* fix(_get_platform_id_for_group): _get_platform_id_for_group 是一个异步方法(async def),但在 main.py 中调用时忘记加 await 了,导致它返回了一个协程对象而不是字符串 ID

* fix(pre-commit)
2025-11-25 23:37:13 +08:00
SXP-Simon 5a0731e492 fix(bot_manager): get_bot_instance 2025-11-25 21:59:41 +08:00
SXP-Simon 3d60a14445 [v4.2.0] (!!!要求:AstrBot v4.5.7+!!!) 适配 AstrBot v4.5.7+ 的新 LLM API 标准,支持多套主题模板切换使用,欢迎为插件贡献新的报告模板 2025-11-25 21:12:30 +08:00
SXP-Simon 6ca52e24ee fix(auto-release): 迁移到 main 2025-11-25 20:59:39 +08:00
SXP-Simon 41f49ee6b3 fix(cr): pre-commit 2025-11-25 20:55:33 +08:00
SXP-Simon d942a5a2eb docs(templates-customization): 欢迎为插件贡献新的报告模板!!! 2025-11-25 20:55:33 +08:00
SXP-Simon 89d79a5491 fix(old): 调整 old 样式 2025-11-25 20:55:33 +08:00
SXP-Simon de31c0514f refactor(chart): 拆分 chart 部分到 template 2025-11-25 20:55:33 +08:00
SXP-Simon aba98cbd05 feat(old): 恢复 old 版本 HTML template 2025-11-25 20:55:33 +08:00
SXP-Simon 150f6c37a9 feat(mutli-templates): 适配多套排版选择 2025-11-25 20:55:33 +08:00
SXP-Simon e385c294a1 feat(llm_utils): 更新了
src/analysis/utils/llm_utils.py
 文件,以适配 AstrBot v4.5.7+ 的新 API 标准。

 主要更改如下:

重构了 Provider 选择逻辑:
将 get_provider_with_fallback 重命名并修改为
get_provider_id_with_fallback
。
现在它返回的是 Provider ID (字符串),而不是 Provider 对象实例。这是因为新的 llm_generate 接口需要通过 ID 来指定使用的模型。
使用了新的 await context.get_current_chat_provider_id(umo=umo) 方法来获取当前会话的模型 ID。
更新了 LLM 调用方式:
在
call_provider_with_retry
 函数中,不再直接调用 provider.text_chat(...)。
改为使用统一的 await context.llm_generate(...) 接口。这是 AstrBot 推荐的新方式,更加简洁且统一。
兼容性调整:
更新了
extract_token_usage
 函数,使其能够从 llm_generate 返回的新响应格式中正确提取 Token 使用统计(优先检查
usage
 属性)。
这些更改确保了插件能够利用 AstrBot 新版本的特性,同时保持了原有的多级回退(配置 -> 主模型 -> 会话模型 -> 任意可用)逻辑不变。
2025-11-25 20:55:33 +08:00
SXP-Simon c211ea7050 chore(copilot_instructions.md): 插件开发文档写入 copilot instructions, 更新 README. 2025-11-25 20:55:33 +08:00
SXP-Simon 9db57a9adb feat(mascot): 为 template footer 添加吉祥物 base64 图片 2025-11-23 20:05:07 +08:00
SXP-Simon 7132acdcb9 [v4.1.0] 群黑白名单机制;使用信号量(Semaphore)并发限制和弱引用字典(WeakValueDictionary)优化锁管理 2025-11-23 13:29:12 +08:00
Helian Nuits e5320969ee feat(auto_scheduler): 添加自动调度器,使用信号量(Semaphore)并发限制和弱引用字典(WeakValueDictionary)优化锁管理;群黑白名单机制。 (#50)
* feat(auto_scheduler): 添加自动调度器,使用信号量(Semaphore)并发限制和弱引用字典(WeakValueDictionary)优化锁管理。

* feat(auto_scheduler): 群黑白名单机制

* feat(自动分析最大并发数): 可配置项添加信号量自定义控制

* debug(获取群)

* fix(config)

* fix(pre-commit): cr
2025-11-23 13:26:09 +08:00
SXP-Simon 06290b8118 chore(demo): 更新 demo 图 2025-11-22 15:37:20 +08:00
SXP-Simon e5256027a6 [v4.0.1] 纠正字体情况,调整字号 2025-11-22 15:32:44 +08:00
SXP-Simon 2da97dd5d2 fix(pdf): 同步更新 PDF 模板 2025-11-22 15:32:44 +08:00
SXP-Simon 8715db4f31 fix(font-family): 使用 Patrick Hand,避免使用英文难以辨识的 Indie Flower,调整字体大小 2025-11-22 15:32:44 +08:00
Helian Nuits bfd74ac54c feat(report/template): 全新设计的报告模板,采用卡通手账日记风格设计,灵感来源于 GalGame 《五彩斑斓的世界》女主二阶堂真红和男主悠马每天晚上写日记的场景 (#48)
* feat(template): 尝试采用卡通手账日记形式的设计风格

* fix(topic): 正确使用样式

* fix(template): 活跃时间段样式调整

* fix(template): 辨识度增强

* fix(head): 五彩斑斓的一天,来看看群里发生了什么吧!

* fix(h1): 五彩斑斓的一天,来看看群里发生了什么吧!

* [v4.0.0] feat(report/template): 全新设计的报告模板,采用卡通手账日记风格设计,灵感来源于 GalGame 《五彩斑斓的世界》女主二阶堂真红和男主悠马每天晚上写日记的场景

* fix(cr): 在Google Fonts链接中添加了Indie+Flower字体,确保--font-hand变量中使用的'Indie Flower'字体能够正确加载。

* fix(pre-commit): 修复了 pre-commit 检查失败的问题。移除了所有未使用的 level 变量赋值
2025-11-22 13:19:07 +08:00
SXP-Simon 2a1dcb3db0 [v3.9.5] fix(report/template): 迁移到应该使用的 jinja2 模板引擎, HTML 文件方便调试和修改 2025-11-22 01:46:58 +08:00
Helian Nuits e12b8d56e0 fix(report/template): 迁移到应该使用的 jinja2 (#47)
* fix(report/template): 迁移到应该使用的 jinja2

* fix(topic): 纠正 topic jinja2 模板

* log(generate): debug

* fix(generator): 之前的代码直接将原始模板字符串和渲染数据分开传递给 html_render_func,但 html_render_func 期望接收的是已经渲染好的完整HTML内容

* fix(template): debug

* debug

* fix(debug): 删除冗余的日志调试

* fix(code quality): cr
2025-11-22 01:43:27 +08:00
SXP-Simon 8287452688 chore(assets): 整理 assets 资源 2025-11-21 23:14:20 +08:00
SXP-Simon ea775b11ba feat(pre-commit): 每次推送代码或创建 PR 时都会自动运行 pre-commit 检查,确保代码质量 2025-11-21 22:54:43 +08:00
SXP-Simon 14377b278a pre-commit 2025-11-21 21:09:05 +08:00
SXP-Simon 4bc91dc4da feat(pre-commit): 每次推送代码或创建 PR 时都会自动运行 pre-commit 检查,确保代码质量 2025-11-21 21:04:57 +08:00
SXP-Simon b9a4ffbcb3 fix(typo) 2025-11-21 14:35:25 +08:00
SXP-Simon 63381e2d03 chore(readme): 更新 readme,使用了 nano banana 生成的项目架构图以及贡献指南 2025-11-21 14:35:25 +08:00
SXP-Simon 4fd2a164fb chore(badge): 增加反馈群&水群 badge 2025-11-18 23:47:23 +08:00
SXP-Simon 093ec99e80 chore(bug_report): 纠正 Bug 提交模板描述 2025-11-18 22:58:22 +08:00
SXP-Simon 20be7b434a [v3.9.0] 实现自动发版和 Issue 模板 2025-11-18 22:46:13 +08:00
SXP-Simon cba8db126e feat(.github): 感谢 @lxfight,参考 https://github.com/lxfight/astrbot_plugin_mnemosyne 的 actions 实现自动发版和 Issue 模板 2025-11-18 22:45:27 +08:00
SXP-Simon 160fee61c6 [v3.8.6] 正确处理群聊分析文件的发送匹配,与消息获取时的逻辑一致 2025-11-18 20:47:42 +08:00
SXP-Simon 49bda3231d fix(分析发送处理正确匹配): 正确处理群聊分析文件的发送匹配,与消息获取时的逻辑一致 2025-11-18 20:45:22 +08:00
SXP-Simon d18f45aaec fix(分析发送处理正确匹配): 正确处理群聊分析文件的发送匹配,与消息获取时的逻辑一致 2025-11-18 20:45:22 +08:00
SXP-Simon 12d0b5061c fix(多消息平台): 获取所有可用的平台,依次尝试获取消息 2025-11-18 20:45:22 +08:00
SXP-Simon 6c282cceb5 fix(平台识别逻辑): 正确处理群不在此平台的情况 2025-11-18 20:45:22 +08:00
SXP-Simon f1022d7c04 [v3.8.5] 处理 Bot 实例与平台 ID 2025-11-18 14:41:31 +08:00
SXP-Simon 453483fb5b fix(多适配器支持): 处理 Bot 实例与平台 ID 2025-11-18 14:38:52 +08:00
SXP-Simon c5ca2a8393 fix(多适配器支持): 处理 Bot 实例与平台 ID 2025-11-18 14:38:52 +08:00
SXP-Simon cd8ef96913 fix(main:92): object of type 'bool' has no len() 2025-11-18 14:38:52 +08:00
SXP-Simon 64ac6c429b fix(多适配器支持): 处理 Bot 实例与平台 ID 2025-11-18 14:38:52 +08:00
SXP-Simon 4f2f5a83af fix(多适配器支持):
1. BotManager 多实例管理 (src/core/bot_manager.py)
将单实例存储改为字典:self._bot_instances = {} (platform_id -> bot_instance)
添加 platform_id 参数支持:set_bot_instance(bot_instance, platform_id=None)
修改 get_bot_instance(platform_id=None) 支持按平台获取实例
更新 auto_discover_bot_instances() 发现并注册所有适配器
改进状态信息,显示发现的平台数量
2. AutoScheduler 多平台支持 (src/scheduler/auto_scheduler.py)
添加 _get_platform_id_for_group(group_id) 方法,根据群ID查找对应平台
修改消息获取逻辑,使用正确的平台和bot实例
更新 unified_msg_origin 构造,使用正确的平台ID
3. main.py 初始化逻辑更新
修改 _delayed_start_scheduler() 显示发现的适配器数量
日志输出每个平台的详细信息

现在插件可以:

自动发现所有适配器:启动时扫描所有平台,注册每个适配器的bot实例
智能路由:根据群ID自动选择正确的适配器获取消息
避免重复:每个群只通过其所属的适配器获取一次消息
完整日志:显示发现的适配器数量和平台信息
2025-11-18 14:38:52 +08:00
SXP-Simon db82bd4c4e [v3.8.0] 支持填入多个QQ账号 #42 2025-11-18 00:17:04 +08:00
SXP-Simon acca39a162 fix(typo): bot_qq_id 更新配置说明 2025-11-18 00:17:04 +08:00
SXP-Simon dbcf05ecb0 fix(topic_analyzer): 话题分析处理历史消息跳过机器人列表中的消息 2025-11-18 00:17:04 +08:00
SXP-Simon eb16f78b15 feat(multi-qq-platforms): 尝试适配多个适配器实例,支持填入多个QQ bot账号 (#42) 2025-11-18 00:17:04 +08:00
Helian Nuits 65f86e7429 Update README.md 2025-11-10 01:38:44 +08:00
SXP-Simon 42ef82f00f [v3.7.0] 自定义每部分分析的服务商,兼容 Astrbot 内置生态,提供更加用户友好的配置 (#30) (#40)
* fix(max_query_rounds): 弃用的 max_query_rounds

* feat(provider): 根据配置键获取 Provider,支持多级回退

回退顺序:
1. 尝试从配置获取指定的 provider_id(如 topic_provider_id)
    2. 回退到主 LLM provider_id(llm_provider_id)
    3. 回退到当前会话的 Provider(通过 umo)
    4. 回退到第一个可用的 Provider

* feat: 添加 _special: select_provider 支持并删除 custom_api_key 相关逻辑

* style: 使用 ruff 格式化代码

* refactor: 重构 provider 选择逻辑并修复兼容性问题

* improve: 改进 Provider 选择和 LLM 调用的日志输出

* [v3.7.0] 根据配置键获取 Provider,支持多级回退
2025-11-10 01:00:31 +08:00
SXP-Simon bc396a3b23 [v3.6.0] (#38, #36, #29) 由于 napcat 存在的问题 [NapNeko/NapCatQQ#441](https://github.com/NapNeko/NapCatQQ/issues/441) 选择取消分页拉取和多次轮询获取逻辑,解决获取消息数量异常的情况 (@exynos967) 2025-11-09 23:22:03 +08:00
SXP-Simon 548b3745d5 feat(meta): 新版本 meta 的 display_name 2025-11-09 22:33:12 +08:00
SXP-Simon f85d648162 feat(logo): 添加 logo 2025-11-09 22:18:24 +08:00
Helian Nuits d01126a886 fix(message_handler): 取消分页拉取、Ruff 自动修复
Merge pull request #39 from exynos967/master
2025-11-09 21:56:55 +08:00
SXP-Simon a1e75270d5 [v3.5.0] (#34) max_tokens 参数处理 以及 过滤机器人自己的消息 2025-11-04 21:23:22 +08:00
Helian Nuits f1b9e638ce [fix] max_tokens 参数处理 以及 过滤机器人自己的消息
Merge pull request #35 from SXP-Simon/fix/user-title
2025-11-04 21:05:38 +08:00
SXP-Simon 709c296345 [fix] (bot_filter) 增强机器人消息过滤机制,防止bot QQ号出现在用户称号分析中 2025-11-04 20:47:29 +08:00
SXP-Simon 284389b5d2 [fix] user_title 获取逻辑 2025-11-04 20:35:26 +08:00