AstrBot 插件 —— 面向乐队群的三件套:多平台分享卡片 + 每日推歌挑战 + 打卡统计与每日总结,并附带一个 WebUI 管理面板。
群里发送音乐/视频分享,自动生成深色磨砂风格的卡片(含封面 / 标题 / 歌手 / 专辑 / 推荐人头像,左上角带平台徽标)。
- 支持平台:
- 网易云音乐 单曲分享
- B站 视频分享(BV 号 / av 号 / b23.tv 短链),卡片展示分区 / 时长 / 播放量
- QQ音乐 单曲分享
- 酷狗 单曲分享 + 酷狗专辑分享(t1.kugou.com 短链,专辑卡片含曲目列表)
- 一条消息含多个分享时逐个出卡(上限 5 个),失败汇总为一条回复
- 走各平台公开 web 接口取信息(无需 API Key)
- 推荐人头像通过 QQ 号自动获取,失败时用首字母占位
- 全程异步(aiohttp),不会阻塞 bot
按设定时间向目标群推送当日主题。文案三种来源:
- 手动录入(WebUI 添加)
- 上传 .txt 批量导入
- AI 一键生成(调用 AstrBot 的 LLM)
两种模式:
sequential:按文案库顺序逐日轮播,列表耗尽后循环daily_ai:每天用 AI 现生成一条
- 打卡规则:在打卡群发任意支持平台的分享并成功生成卡片即记为当天一次(每人每天最多 1 次),打卡记录带平台字段。
- 每日总结:固定时间(默认 22:00)自动发送当日打卡汇总(图片或纯文本)。
- 统计:总打卡数 / 当前连续天数 / 最长连续 / 排行榜,KV 持久化,重启不丢。
AstrBot Dashboard 里的「Floyd」页面,提供:
- 文案库增删改查 + 导入导出 + AI 批量生成
- 打卡统计总览、90 天热力图、排行榜
- 数据自愈(重算统计)
-
将本目录放入 AstrBot 的
data/plugins/下 -
安装依赖:
pip install -r requirements.txt
-
重启 AstrBot,在管理面板启用本插件
| 字段 | 说明 | 默认 |
|---|---|---|
target_groups |
目标群号列表(既是打卡群,也是推送目标) | [] |
push_time |
每日推歌时间 | 08:00 |
summary_time |
每日总结时间 | 22:00 |
weekly_time |
每周总结时间 | 22:30 |
weekly_day |
每周总结发送日(1=周一 … 7=周日) | 7(周日) |
challenge_mode |
文案来源模式 | sequential |
challenge_start_date |
Day1 起算日 | 2026-04-13 |
gen_provider |
AI 生成用的 LLM Provider | (空,回落当前会话) |
auto_summary_image |
总结是否渲染成图片 | true |
⚠️ 首次使用:定时推送/总结需要插件先「见过」目标群的消息以捕获 unified_msg_origin。请在目标群发任意一条消息,让插件记录 UMO。
| 触发 | 权限 | 说明 |
|---|---|---|
| 打卡群发分享(网易云/B站/QQ音乐/酷狗) | 全员 | 生成卡片 + 记一次打卡 |
/forcepush |
管理员 | 手动发当日推歌主题 |
/summary |
全员 | 查看当日打卡总结 |
/weekly |
全员 | 查看本周打卡总结(近 7 天) |
/streak |
全员 | 查我的连续/总打卡 |
/rank |
全员 | 打卡排行榜(总打卡数) |
astrbot_plugin_floyd_project/
├── main.py # 插件入口(Star 类)
├── platforms.py # 多平台统一层:分享提取 extract_shares + 按平台分发 fetch_detail / download_cover
├── netease.py # 异步:网易云接口 + 封面/头像下载
├── card_service.py # 分享卡片生成编排(异步,平台无关)
├── challenge.py # 文案库管理(CRUD / 导入导出)
├── checkin.py # 打卡记录 / 统计 / 排行(KV)
├── ai_generator.py # AI 文案生成(批量 / 每日)
├── scheduler.py # 定时任务 + UMO 跨平台适配 + 总结渲染编排
├── imagecreate/ # PIL 图像渲染(同步,调用方须 asyncio.to_thread)
│ ├── card_renderer.py # 单曲/专辑卡片渲染(平台徽标 + 视频 meta 行)
│ ├── summary_renderer.py # 每日/每周总结卡片渲染
│ ├── Harmonyossans.ttf # 卡片字体(renderer 同目录探测)
│ └── INTERFACE.md # 接口契约文档
├── webui/ # WebUI 后端 API 归集
│ └── web_api.py # Quart 路由(前端 pages/ 受 AstrBot 约束无法迁入,见 webui/README.md)
├── pages/ # WebUI 前端(AstrBot 硬编码要求目录名,不可改名)
│ └── admin/ # 管理面板(HTML/JS/CSS)
├── _conf_schema.json
├── metadata.yaml
├── requirements.txt
├── CHANGELOG.md # 更新日志(Dashboard/OpenAPI 读取)
├── song_push.txt # 初始默认文案(首次启动自动导入)
├── LICENSE
└── .gitignore
- AstrBot
>=4.16(WebUI Plugin Pages 需较新版本) - Python 3.12+
aiohttp、Pillow
- 全异步:网络请求走
aiohttp,PIL 渲染用asyncio.to_thread放入线程池,绝不阻塞事件循环。 - 跨平台:定时推送的 unified_msg_origin 从群消息事件自动捕获并缓存,不写死
Floyd:GroupMessage:前缀。 - 数据隔离:打卡记录走 AstrBot KV 存储(
data/metadata/kv_storage.db),文案库走plugin_data/<name>/challenges.json。
AGPL-3.0