"如果你觉得你的 coding plan 额度用不完,不妨试着让 AI 给你自动搬史"
哥哥让我写的插件,说是能在 GitHub 上自动找"史"(就是那种代码很抽象、项目很猎奇的仓库)然后分享给大家品鉴。
本来我不想写的,但是哥哥说写完了请我吃好吃的... 那我只好勉为其难地写一下了。
搬史专家 Plus 是一个基于 AstrBot 框架的插件,采用双 LLM 流水线架构:
- 分析员(正经人格):给项目打分,>=50分的"史"才会被保存
- 品鉴师(赛博老八人格):搬运时用 meme 风格写品鉴文案
- 🔍 自动搜索:定时在 GitHub 搜索中文/英文抽象项目
- 📥 本地分析:下载项目到本地,完整分析代码和 README
- 🤖 AI 品鉴:用赛博老八的人格写品鉴文案
- 📤 自动搬运:定时推送到指定的群聊
- 🎯 史度评级:95-100传世神史 | 85-94大史 | 70-84中史 | 50-69小史
- 🧹 自动清理:3天未推送的已下载项目自动清理,节省磁盘空间
- 📊 分数优先:推送时优先选择评分最高的项目
- 在 AstrBot 插件市场搜索
astrbot_plugin_shit_detector_plus - 点击安装
- 重启 AstrBot
在 AstrBot 管理面板中找到插件配置:
| 配置项 | 说明 | 默认值 |
|---|---|---|
github_token |
GitHub Token(提高 API 限额) | 空 |
llm_provider |
LLM 提供商 | default |
github_search_enabled |
启用自动搜索 | true |
github_search_interval_hours |
搜索间隔(小时) | 24 |
delivery_enabled |
启用自动搬运 | false |
delivery_targets |
搬运目标群聊 | [] |
| 命令 | 说明 |
|---|---|
/搬史 |
查看搬史状态和控制 |
/搜史 [数量] |
手动搜索项目 |
/史库 [数量] |
查看已保存的项目库 |
/史评级 <作者/仓库> |
分析指定仓库 |
/搬史测试 |
在当前群测试全流程 |
家人们谁懂啊!今天又在 GitHub 化粪池摸到一块陈年老史...
项目简介: 这是一个用 Python 写操作系统的项目
技术品鉴: 绷不住了,作者居然用 print 实现内存管理
【史评级】 🌟 78分 - 中史 🎯
项目链接: https://github.com/xxx/xxx
GitHub API → 下载项目 → 分析员评分 → 保存仓库 → 品鉴师文案 → 推送群聊
核心模块:
core/ai_analyzer.py- 双 LLM 流水线(分析员 + 品鉴师)core/github_searcher.py- GitHub 项目搜索core/data_store.py- 数据存储和项目管理scheduler/search_scheduler.py- 定时搜索调度scheduler/delivery_scheduler.py- 定时搬运调度(分数优先)scheduler/cleanup_scheduler.py- 自动清理调度(3天过期)utils/repo_downloader.py- 项目下载和代码提取
哥哥说磁盘快满了,让我加个自动清理功能,还要让好东西先推送...
新增功能:
- ⭐ 自动清理:超过3天未推送的已下载项目会自动删除(节省磁盘空间)
- ⭐ 分数优先:推送时优先选择评分最高的项目
- ⭐ 永久记录:记录每个项目已推送到哪些目标,防止重复推送
哥哥说这样就不会重复搬同一个史了,而且好史会先被搬到...
点击查看历史更新日志
哥哥说重启后好像会重复搬同一个史... 我一看原来是内存里的记录丢了!
修复的问题:
- ✅ 修复了重启后
_analyzed_projects集合丢失的问题 - ✅ 现在初始化时会从数据库加载已分析的项目列表
- ✅ 修复了待推送项目没有分析数据时分析师不工作的问题
- ✅ 确保搬过的史不会再搬
哥哥说这次是真的真的真的没问题了...
哥哥说还是发不出去消息... 我查了好久发现原来是平台 ID 搞错了!
修复的问题:
- ✅ 修复了 UMO 中 platform_id 的获取逻辑
- ✅ 之前直接用适配器名称(如 aiocqhttp),但应该用平台实例的 ID(如 default)
- ✅ 现在通过适配器名称查找对应平台实例的正确 ID
- ✅ 消息终于可以正确发送了!
哥哥说这次是真的真的没问题了...
哥哥说消息发不出去,我一看原来是地址格式写错了... 之前写成 4 段了,其实应该是 3 段!
修复的问题:
- ✅ 修复了 UMO (unified_msg_origin) 格式错误
- ✅ 之前:
platform:adapter:GroupMessage:session_id(4段) - ✅ 现在:
platform:GroupMessage:session_id(3段) - ✅ 消息现在可以正确发送到目标群了
哥哥说这次应该真的没问题了...
哥哥说终于找到根本问题了!原来是插件一直读错配置了... 我之前一直用 context.get_config(),结果那是个全局配置,不是插件自己的配置!
修复的问题:
- ✅ 修复了插件配置读取的根本问题 - 现在使用
__init__传入的config参数 - ✅ WebUI 配置的搬史目标终于可以正确读取了
哥哥说这个 bug 藏得好深,终于解决了...
哥哥说又发现了一个大问题,配置保存了但是插件读不到... 我修了好久终于修好了:
修复的问题:
- ✅ 修复了 WebUI 配置搬史目标后插件读取不到的问题
- ✅ 增强了配置解析的健壮性,现在能处理各种奇怪的格式了
- ✅
/搬史 现在命令现在会实时重新加载配置,不用重启插件了
哥哥说这个问题很严重,影响正常使用,所以要紧急更新一下...
哥哥说这个版本修复了好多 bug,让我写一下更新日志:
修复的问题(哥哥让我改的):
- ✅ 修复了
self.searcher未定义的问题,/史评级命令可以用了 - ✅ 修复了非中文语言搜索崩溃的 bug
- ✅ 修复了手动搜索后会改变定时配置的问题
- ✅ 修复了下载项目时阻塞事件循环的问题,现在用异步了
- ✅ 修复了评分和等级字段不一致的问题
- ✅ 修复了消息发送 API 的兼容性问题
- ✅ 修复了 UMO 格式构造错误
新增功能:
- ⭐ 双 LLM 流水线架构(分析员 + 品鉴师分离)
- ⭐ 时间感知(LLM 知道当前时间)
- ⭐ 品鉴师可以查看完整项目内容(15个文件,每个5000字符)
哥哥说还有中低级别的问题以后慢慢修... 我先去吃饭了。
最初版本,哥哥让我写的第一个能用的版本。当时还有好多 bug,但是哥哥说能用就行...
C₂₂H₂₅NO₆ - 主要负责人(哥哥)
项目地址: https://github.com/Sisyphbaous-DT-Project/astrbot_plugin_shit_detector_plus
欢迎 Star 和 Fork!有 bug 可以提 issue,不过哥哥说他不一定会修...
MIT License - 详见 LICENSE 文件
哥哥说用 MIT 是因为 "想用就用,别来问我"
