snowy-yang
|
bb60137ac7
|
fix: B站点歌无反应——songmid自带竖线拆散按钮回调data
代码测试 / ruff + pytest (push) Canceled after 0s
bili 的 songmid 形如「BV号|cid」,与回调 data 的分隔符撞车:拆段
从 5 变 6,handle_button 判为非本 bot 按钮直接丢弃,且发生在回应
互动之前——客户端按钮一直转圈、日志无任何记录,表象即「点歌卡死」。
_song_data 给歌曲 id 一并 % 转义(_q),_song_of_data 对应 unquote;
旧按钮 id 不含 %,unquote 幂等不受影响。附 bili 往返回归测试。
|
2026-10-04 17:54:24 +08:00 |
|
snowy-yang
|
c364506925
|
feat: 文件代理、群消息防双发、下载指令出选歌菜单与音频平台选集
代码测试 / ruff + pytest (push) Canceled after 0s
- 文件代理(PUBLIC_URL):上传与直链文本的 URL 换成 bot 公开地址,请求
到来现场重解析直链再转发字节,绕开 QQ 抓风控直链失败(40093007)与
qs 本地流外网不可达;PROXY_PORT 指定监听端口
- 群消息去重补第二把钥匙:全量模式下 @消息同时命中两事件且 msg_id 不同,
只按 msg_id 拦不住,再加「群+发送人+文本」10 秒短窗(修双发)
- 「<平台>下载 <歌名>」改出该平台的选歌菜单(与 /点歌 同款交互、spage
翻页锁定平台),不再直接下第一首
- 猫耳/懒人/蜻蜓节目级条目点编号先出选集菜单(/album):猫耳选集接口
忽略翻页参数,一次拉 50 集本地切片;懒人/蜻蜓走服务端翻页;空选集
(已下线/需登录)给明确提示
- 指令面板条目按 /sources 现算、按宽度裁剪(修 30013 超限);装配入口
改用 Bot 门面;qqbotsdk 依赖更名 qqbotsdk-py(撤 GitHub archive 源)
|
2026-10-03 23:55:33 +08:00 |
|
snowy-yang
|
324fe86962
|
按钮回调防抖与先应答:10 秒去重、进门回应互动、播放/下载先回占位消息
- 同一互动 uuid(平台重复推送)或同群同按钮 10 秒内只处理一次;连点
仍应答互动,关掉客户端 loading
- 播放/下载结果以 msg_seq=2 补发(同一事件相同 msg_seq 的二次回复会被
QQ 拒绝)
- 一并入库此前未提交的 /sources 平台发现(直链回退链按服务器能力动态
解析);uv.lock 随上游 qqbotsdk main 更新 sdist hash
|
2026-09-30 18:59:17 +08:00 |
|
snowy-yang
|
24c235c93d
|
修复 CI:slim 镜像没有 curl,网络操作改用 python 标准库
代码测试 / ruff + pytest (push) Successful in 1m16s
首轮实跑 1s 即死,日志定位 /var/run/act/workflow/0.sh: curl: command
not found——python:3.13-slim 不带 curl/wget/git;SDK 仓库那份 ci.yml
的「curl 可用」是宿主机 probe 验证的,进了 container 不成立(且该
方案在 Gitea 上从未跑绿过,后来整体迁去了 GitHub)。
- archive 拉取与 commit status 上报改用 python3 urllib(容器里保证
在场的只有 python),note() 参数经 argv 传入、token 走环境变量
- 去掉 pyright 及其 apt 装 node 的兜底:多一条网络依赖链,且本地
pyright 常绿,CI 保持 ruff + pytest 即可
- 各步骤不再吞输出,日志可直接定位
|
2026-09-24 22:00:07 +08:00 |
|
snowy-yang
|
0145b7b01a
|
新增 Gitea Actions 代码测试流水线
代码测试 / ruff + pyright + pytest (push) Failing after 2s
沿用 SDK 仓库实跑验证过的形态:container 锁 python:3.13-slim(runner
默认镜像工具链不明,曾 7s 即死)、不走 actions/checkout 改从 Gitea
archive 接口拉源码 tarball(runner 对 github 连通性不稳)、关键步骤
成败上报 commit status(日志匿名不可读,status 远程可读;GITEA_TOKEN
未配置时静默降级)。检查项 ruff + pyright + pytest(本地全绿),
uv sync 针对依赖里的 GitHub archive 源失败自动重试 3 次。
|
2026-09-24 21:55:48 +08:00 |
|
snowy-yang
|
508604610f
|
qqbotsdk 依赖改走 GitHub archive 源
GitHub(snowy-yang/qqbotsdk)已是 SDK 主仓库,Gitea 反为其镜像。
[tool.uv.sources] 从 Gitea git 源切到 GitHub archive tarball 的 url 源:
安装不再需要 git,uv 按 sdist 构建、lock 记录内容 hash;升级依赖用
uv lock --upgrade-package qqbotsdk 重取 main 最新。README 的 SDK 链接
同步指向 GitHub。
|
2026-09-24 21:55:41 +08:00 |
|
snowy-yang
|
94ee3298b7
|
新增斜杠指令面板:/v2/panels 自动注册,帮助消息带指令按钮
- panel.py 调开放平台 2026-08 新增的 /v2/panels 接口,把 点歌/歌词/帮助
三条指令同步到输入框 / 菜单:READY 时幂等同步(没有则创建、内容有变
则更新、一致则跳过,重连自愈),target_type=all 对全部群生效;失败
只记日志不影响运行;COMMAND_PANEL=off 可关闭
- 斜杠指令与 @机器人 消息归一解析:_normalize 剥开头 / 与 @ 前缀,
与裸文本命令共用 handle_command(/点歌 稻香、@bot 点歌 稻香、
点歌 稻香 三种写法等价)
- 只敲命令不带参数(斜杠指令参数可为空)时回复用法提示
- 帮助消息带 [🎤 点歌][📝 歌词] 指令按钮(action type=2,点击把
/点歌 填进输入框),键盘无权限自动回退纯文本;帮助文案改以 / 指令呈现
|
2026-09-24 21:55:32 +08:00 |
|
snowy-yang
|
d71809d144
|
热重载监督者优雅响应 Ctrl+C:先等子进程收尾再回收
- run_supervisor 捕获 KeyboardInterrupt:不打 traceback、退出码归零,
给子进程 _GRACE_SECONDS=5s 自行收尾窗口(打退出日志、关连接),
超时才 taskkill /F /T;文件变更重启仍立即强杀(子进程不知情不会自己退)
- main() 兜底监督循环间隙的 Ctrl+C
- start.bat 改为发射器:start 新开独立控制台跑 cmd /c 命令行(非批
处理),Ctrl+C 直接停进程,规避「终止批处理操作吗(Y/N)」,发射器
即退;bat 保持纯 ASCII 防 GBK 乱码
|
2026-09-24 21:55:17 +08:00 |
|
snowy-yang
|
6b6492dc8d
|
升级到新版 SDK 并补充点歌业务日志
- 锁定 qqbotsdk b37a53f(含:健康断开零等待重连、静默常规连接日志、
失败才记断开与退避)
- 新增业务日志:启动打印生效配置、点歌/查歌词/帮助、菜单已发、
选歌、按钮点击、语音/文件/直链已发,失败项统一带群号前缀
(此前 18 处日志 17 处是 warning,成功路径完全静默,故日志里
看不到任何点歌消息)
|
2026-09-21 18:26:23 +08:00 |
|
snowy-yang
|
a11c0b375f
|
新增热重载:文件变更自动重启(开发用,默认关)
- musicbot/reload.py:轮询监控 musicbot/ 下的 .py 与 intents.toml/.env,
变更后重启 bot 子进程;跳过 logs/、__pycache__/、.venv/
- 进程级重启而非模块重载:长连接 + 模块级状态 + handler 闭包,
就地重载易留幽灵 handler,重启子进程状态干净
- 子进程用 _MUSICBOT_RELOAD_CHILD 标记,不会套娃自我复制
- Windows 用 taskkill /T 收整棵进程树,实测连续重载无进程泄漏
- 开启方式:`uv run musicbot --reload`(start.bat 已带)或 RELOAD=on
- 监督者不配日志,避免与子进程抢写同一日志文件
|
2026-09-20 22:44:20 +08:00 |
|
snowy-yang
|
9bcdad7aa1
|
新增日志支持、卡片显示专辑封面、菜单去掉音源标注
- 日志:控制台 + logs/musicbot.log(按天轮转、保留 7 天),
LOG_LEVEL/LOG_DIR 可配;目录不可写时退化为仅控制台;
diagnose=False 避免把凭证写进日志
- 卡片用 Markdown 图片语法显示专辑封面(),
封面取自 MusicServer 的 img 字段(tx/wy 有、kw/kg 无)
- 按钮 data 加第 5 段(封面 URL),解码兼容旧 4 段,已发出的按钮不失效
- 菜单去掉每首歌后的(音源)标注;卡片保留"来源:"
- 测试补:封面渲染、无封面源、旧 data 兼容、LOG_LEVEL、日志落盘
|
2026-09-20 22:36:40 +08:00 |
|
snowy-yang
|
7a8adb4571
|
QQ 群点歌 bot:选歌菜单 + 歌曲卡片 + 回调按钮
基于 qqbotsdk 的群点歌机器人:
- 点歌 <歌名>:Markdown 选歌菜单,每行 5 个编号回调按钮 + 上下页
(每页 MENU_PAGE_SIZE 首,默认 10,受内嵌键盘 5 行限制上限 20)
- 点编号弹歌曲卡片:[▶播放] 发语音 / [⬇下载] 发文件或直链(SEND_MODE)
- 支持不 @ 机器人也能触发(GROUP_MESSAGE_CREATE 全量模式),
按 msg_id 排重并拦截机器人自发消息回推(self-echo)
- 直链候选源回退:tx 等源受 CDN 风控时按 kw/wy/mg 逐个换源
- 自动撤回(WITHDRAW)翻页撤旧菜单、选歌撤菜单、点击后撤卡片
|
2026-09-20 22:27:09 +08:00 |
|