Profile
Back to NewsBack
GitHub Trending 2 min
Reader Mode
XiaoMengXinX/Music163bot-Go: 一个用来下载/分享网易云歌曲的Telegram Bot

XiaoMengXinX/Music163bot-Go: 一个用来下载/分享网易云歌曲的Telegram Bot

5 hours ago

Music163bot

一个用来下载/分享/搜索网易云歌曲的telegram bot

演示bot:https://t.me/Music163bot

@Music163bot MAU

✨ 特性

  • 分享链接嗅探(含 163cn.tv / 163cn.link 短链)
  • inlinebot
  • 歌曲搜索
  • 为歌曲文件添加163key
  • 歌曲快速分享
  • 下载无损flac音频(需设置网易云VIP账号的 MUSIC_U)
  • 网易云扫码登录(管理员 /login,免手动抓 MUSIC_U)
  • 语音识别搜歌(/recognize,直接解析 OGG/Opus,无需 FFmpeg)
  • 优雅退出与 /reload 热重载配置

⚙️ 构建

构建前请确保拥有 Go 1.22 或更高版本

git clone -b v3 https://github.com/XiaoMengXinX/Music163bot-Go
cd Music163bot-Go
bash build.sh

也可以加入环境变量以交叉编译,如

GOOS=windows GOARCH=amd64 bash build.sh

🛠️ 部署

修改配置文件

复制 config_example.toml 为 config.toml 并按注释填写:

[bot]
token = "YOUR_BOT_TOKEN"   # 必填
admin = [123456]           # 管理员 ID
upload_timeout = "120s"    # 上传及其他 Telegram API 请求的总超时

[netease] music_u = "YOUR_MUSIC_U" # 必填,网易云 cookie 中的 MUSIC_U(下载无损需 VIP 账号) level = "hires" # 优先音质,账号无权限时自动降级 proxy = "" # 网易云请求代理,如 http://127.0.0.1:8080 或 socks5://127.0.0.1:1080

[download] timeout = "60s" retries = 3 concurrency = 4 reverse_proxy = "" auto_retry = true

完整配置项见 config_example.toml。所有配置都可用 MUSIC163BOT_ 前缀的环境变量覆盖 (如 MUSIC163BOT_BOT_TOKEN、MUSIC163BOT_DOWNLOAD_TIMEOUT),便于容器部署。

指令菜单在每次启动时自动注册(无需在 BotFather 手动设置): 普通用户看到 /music /search 等公共指令,管理员额外看到 /login /rmcache /reload /setcachechat。

inline 模式需要在 BotFather 手动开启并设置占位文案

启动

$ ./Music163bot-Go -c config.toml
2026/01/01 12:00:00 [INFO] Music163bot v3.0.0 启动中 (main.go:47)
MUSIC_U 已失效,请重新扫码登录

请使用网易云音乐 App 扫描二维码登录(Ctrl-C 退出) ...(终端二维码)... 扫码登录成功,已写入 config.toml 2026/01/01 12:00:20 [INFO] Music163bot 验证成功 (app.go:100)

MUSIC_U 缺失或已失效时,bot 会照常启动,终端内会打印登录 二维码,同时管理员会收到带「扫码登录」按钮的提示,点击按钮扫码登录; 扫码成功自动写入配置并恢复下载,超时未登录则自动停止运行。 运行中 MUSIC_U 失效时,新歌下载会暂停(缓存过的歌曲仍可发送),管理员重新登录后自动恢复。

管理员发送 /reload 可在进程内重载配置,无需重启。

Docker 部署

配置好 config.toml 后启动:

mkdir -p data
docker compose up -d

data/ 存放歌曲缓存数据库 cache.db,以及 SQLite 运行时生成的 cache.db-wal、cache.db-shm 文件。首次启动会自动创建数据库。

已有数据库时,先停止旧 bot,再将原来的 cache.db 及同名 -wal、-shm 文件(如有)一起移入 data/,然后启动容器。

镜像以 root 用户运行,配置、数据库、缓存和日志均挂载到宿主机。 听歌识曲使用 NeteaseCloudMusic-Audio-Recognize-Reverse 在本地解析音频并用纯 Go Library 提取指纹,再请求网易云匹配。识别片段长度自动适配,不依赖外部识曲服务或 FFmpeg。

自建 Bot API 本地模式

Bot API 以 --local 运行时,在 config.toml 中开启本地文件读取:

[bot]
api_url = "http://127.0.0.1:8081"
local_mode = true

也可设置环境变量 MUSIC163BOT_BOT_LOCAL_MODE=true。此选项只控制 bot 的文件读取方式, Bot API 服务需要单独启用 --local。

bot 必须能读取 getFile 返回的绝对路径。同机直接运行时确保有读取权限; 如果 bot 在容器中,需要将 API 的实际文件存储目录以相同绝对路径、只读方式挂载到 bot 容器。 例如 API 的存储目录为 /srv/telegram-bot-api,在 bot 服务的 volumes 中添加:

- /srv/telegram-bot-api:/srv/telegram-bot-api:ro

容器内的 api_url 应填写能访问到的 API 地址,127.0.0.1 指向容器自身。 跨服务器使用本地模式需要共享存储。语音文件会复制到 bot 的临时目录后处理,原文件不会被修改或删除。 使用官方 API 时保持 local_mode = false。

📦 从 v2 升级

命令和交互与 v2 一致,直接用原来的目录启动即可:

  1. 配置:把 v2 的 config.ini 放在程序同目录,首次启动会自动转换成
config.toml 并打印提示;也可以先手动执行 ./Music163bot-Go migrate-config -c config.ini -o config.toml。 v2 里没有实现的配置项(AutoUpdate、CheckMD5、SrcPath、BotEntry)在转换时丢弃并提示。
  1. 数据库:v2 的 cache.db 首次启动时自动迁移,重复的缓存行会去重并建唯一索引,
已缓存的歌曲全部保留。

🤖 命令

  • /music 或 /netease <关键词> —— 按 ID 或关键词点歌
  • /search <关键词> —— 搜索歌曲,可翻页(最多 5 页),点数字按钮直接发送;按钮仅限搜索者在 10 分钟内使用
  • /program —— 电台节目
  • /lyric <关键词/ID>(或回复一条含分享链接、歌曲按钮的消息)—— 发送歌词文件,并在说明中附上折叠的歌词
  • /recognize(回复一条语音)—— 语音识别搜歌
  • /status —— 缓存统计
  • /about —— 关于本 bot
  • /start —— 深链点歌(inline 未缓存引导)
  • 管理员:/rmcache (或回复歌曲消息)清除缓存、/reload 重载配置、/login 网易云扫码登录、/setcachechat [群 ID] 设置 Guest Mode 缓存群
  • 直接发送网易云分享链接即可嗅探点歌;inline 输入 help 查看用法
Guest Mode:在 @BotFather 的 Mini App 中为机器人开启 Guest Mode 后, 可在 Telegram 支持的群组或私聊里回复一条网易云分享链接或语音,并发送 @你的Bot用户名, 也可直接发送 @你的Bot用户名 分享链接。机器人无需加入该聊天: 已缓存的歌曲直接发送音频,未缓存的歌曲返回歌曲信息和在 Bot 中获取的按钮; 语音则返回识别出的歌名、歌手、专辑和网易云链接按钮。 每次访客调用只回复一条结果,不发送进度消息。

Guest Mode 无法直接上传文件。设置缓存群后,未缓存的歌曲会先下载并上传到缓存群, 再以音频回复访客。管理员在目标群内发送 /setcachechat 即设为当前群, 也可发送 /setcachechat <群 ID> 指定其它 bot 可发言的聊天,/setcachechat 0 关闭; 设置会写入配置文件的 [bot] cache_chat。未设置时保持上述行为。 下载耗时过长时本次回复可能超时,但歌曲已写入缓存,再次调用即可直接发送。 自建 Bot API 服务需支持 Bot API 10.0 的 guest_message 和 answerGuestQuery。

网易云扫码登录:MUSIC_U 过期时,管理员发送 /login,bot 回一张二维码, 用网易云音乐 App 扫码确认后,bot 会立即用新账号凭据继续工作(无需重启), 并把新的 music_u 自动写回 config.toml。

Chat with me