基于 NoneBot2 的酷我音乐插件,面向 NapCat / OneBot V11 使用场景,提供搜索、直链、音乐卡片、语音和文件发送能力。
kwsearch <关键词>- 返回搜索结果列表
- 支持
text/image
kw搜索 <关键词>kwsearch中文别名
kw <关键词> [-q/--quality <quality>]- 搜索后直接取第一首歌
- 支持
text/card/record/file
kwid <rid> [-q/--quality <quality>]- 直接通过
rid获取歌曲 - 支持
text/card/record/file
- 直接通过
nb plugin install nonebot-plugin-kuwo --upgrade使用 PyPI 源:
nb plugin install nonebot-plugin-kuwo --upgrade -i https://pypi.org/simple使用包管理器安装
推荐使用 uv:
uv add nonebot-plugin-kuwo安装 GitHub 仓库主分支:
uv add git+https://github.com/006lp/nonebot-plugin-kuwo@main如果你使用其他包管理器,也可以选择:
pdm add nonebot-plugin-kuwopoetry add nonebot-plugin-kuwo安装后,在 NoneBot2 项目的 pyproject.toml 中加入:
plugins = ["nonebot_plugin_kuwo"]COMMAND_START=["/"]
LOG_LEVEL=INFO
KUWO_SEARCH_LIMIT=5
KUWO_LIST_RENDER_MODE=text
KUWO_TRACK_RENDER_MODE=text
KUWO_DEFAULT_QUALITY=standard
KUWO_TRACK_CACHE_RETENTION_DAYS=1
KUWO_TRACK_CACHE_MAX_SIZE_MB=1024配置项说明:
| 配置项 | 默认值 | 说明 |
|---|---|---|
KUWO_SEARCH_LIMIT |
5 |
搜索结果条数,范围 1-10 |
KUWO_LIST_RENDER_MODE |
text |
搜索列表模式,支持 text / image |
KUWO_TRACK_RENDER_MODE |
text |
单曲输出模式,支持 text / card / record / file |
KUWO_DEFAULT_QUALITY |
standard |
默认音质 |
KUWO_TRACK_CACHE_RETENTION_DAYS |
1 |
文件缓存保留天数,0 表示关闭按天清理 |
KUWO_TRACK_CACHE_MAX_SIZE_MB |
1024 |
文件缓存总大小上限,0 表示关闭按大小清理 |
音质枚举:
standardexhighlosslesshireshifisurjymaster
特殊规则:
KUWO_TRACK_RENDER_MODE=card且未显式设置KUWO_LIST_RENDER_MODE时,搜索列表默认切到imagerecord模式强制回落到standardcard模式音质上限固定为losslessKUWO_TRACK_CACHE_MAX_SIZE_MB小于600时仅记录警告,不阻止启动
kwsearch / kw搜索 当前支持两种输出:
text- 每行格式:
序号. 音乐id 歌曲名-歌手
- 每行格式:
image- 使用
nonebot-plugin-htmlrender生成图片列表 - 直接复用搜索接口返回的
web_albumpic_short - 渲染失败时自动回退到文本
- 使用
kw / kwid 当前支持四种输出:
text- 有封面时发送
图片 + 文本 - 文本包含:歌曲名、歌手、专辑、时长、码率、直链
- 若接口返回
ekey,文本中会额外带上ekey
- 有封面时发送
card- 发送自定义音乐卡片
url和audio都使用真实直链
record- 发送语音段
- 始终使用
standard
file- 下载到本地缓存后发送文件段
.mflac会先解密成可播放的.flac
kw 和 kwid 都支持:
-q
--quality
示例:
/kw Summer Pockets -q lossless
/kwid 553152678 --quality exhigh
file 模式使用 nonebot-plugin-localstore 的插件缓存目录,并在其下维护 tracks/ 子目录。
普通可直接发送的格式:
mp3flacaacoggwav
缓存策略:
- 相同
rid + bitrate优先复用缓存 - 缓存命中会刷新文件时间
- 默认按
1天和1024MB双重策略清理 - 两个值都设为
0时,不做自动清理
.mflac 流程:
- 下载原始
.mflac - 使用 Kuwo 返回的
ekey - 提取 QMC 原始密钥
- 推导最终 QMCv2 密钥
- 本地解密为
.flac - 发送解密后的文件
- 删除中间
.mflac
项目强制使用 uv。
uv sync
uv run maturin develop --release常用命令:
uv run ruff check .
uv run pytest tests -q -p no:cacheprovider
cargo fmt --all说明:
- 发布版 wheel 会自带原生扩展
_qmc_rs - 源码开发或本地调试需要先执行
maturin develop
nonebot_plugin_kuwo/
├── __init__.py
├── config.py
├── data_source.py
├── models.py
├── qmc.py
├── render.py
└── utils.py
src/
└── qmc.rs
tests/
- LiuLang 提供 DES 解密算法思路
- UnblockNeteaseMusic/server 提供音乐直链接口
本项目使用 AGPL-3.0 许可证。
