-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathconfig_example.ini
More file actions
528 lines (498 loc) · 24.2 KB
/
Copy pathconfig_example.ini
File metadata and controls
528 lines (498 loc) · 24.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
# ========================================
# MusicBot-Go 配置文件
# ========================================
# 本配置文件使用 INI 格式
# 支持插件化平台配置: [plugins.platform_name]
# 详见: https://github.com/liuran001/MusicBot-Go
# ========================================
# 基础配置 (Required)
# ========================================
# 你的 Bot Token (必填)
BOT_TOKEN = YOUR_BOT_TOKEN
# ========================================
# 可选配置 (Optional)
# ========================================
# -------- Bot 基础 --------
# 自定义 telegram bot API 地址
BotAPI = https://api.telegram.org
# 管理员用户 ID(逗号分隔),仅管理员可执行 /reload 和 /rmcache
BotAdmin =
# -------- 权限与限流 --------
# 是否启用聊天白名单 (默认: false)
# 开启后仅允许白名单中的 chatID 使用 Bot,BotAdmin 始终可绕过
EnableWhitelist = false
# 白名单 chatID 列表(逗号/分号/空格分隔)
# 可通过管理员命令 /wl add <chatID>、/wl del <chatID> 动态维护并回写到配置文件
WhitelistChatIDs =
# 发送限流:每秒消息数 (默认: 1.0)
RateLimitPerSecond = 1.0
# 发送限流:突发消息数 (默认: 3)
RateLimitBurst = 3
# 资源限流:对会打外部平台 API 的用户操作做滑动窗口限流,四个维度同时校验
# (单用户 / 单对话 / 单平台所有用户合计 / 全局所有平台合计),任一维度超限即拒绝该次操作,
# 被拒的请求不消耗任何配额。每个维度的值 <=0 表示禁用该维度;某操作四项全 0 即不限流。
# 缓存命中不经过限流,不消耗配额:已下载过的歌曲、已展开的歌单页、以及歌词的格式
# 切换/翻译开关(同一首歌的原始歌词只取一次,之后切 14 种格式都是本地转换,不再重取)。
# 共享滑动窗口长度 (单位秒, 默认: 60)
ResourceRateLimitWindowSeconds = 60
# 搜索 (默认 单用户5 / 单对话12 / 单平台10 / 全局20)
SearchRateLimitPerUser = 5
SearchRateLimitPerChat = 12
SearchRateLimitPerPlatform = 10
SearchRateLimitGlobal = 20
# 歌词获取 (默认 单用户8 / 单对话20 / 单平台20 / 全局40)
# 注:同一首歌的格式切换/翻译开关走缓存、不计配额,此处仅限制不同歌曲的首次取词
LyricRateLimitPerUser = 8
LyricRateLimitPerChat = 20
LyricRateLimitPerPlatform = 20
LyricRateLimitGlobal = 40
# 下载/解密 (默认 单用户4 / 单对话8 / 单平台15 / 全局30)
DownloadRateLimitPerUser = 4
DownloadRateLimitPerChat = 8
DownloadRateLimitPerPlatform = 15
DownloadRateLimitGlobal = 30
# 听歌识曲 — 最耗资源(下载+ffmpeg+外部识别),按用户和全局限,不按平台
# (默认 单用户3 / 单对话4 / 单平台0(禁用) / 全局10)
RecognizeRateLimitPerUser = 3
RecognizeRateLimitPerChat = 4
RecognizeRateLimitPerPlatform = 0
RecognizeRateLimitGlobal = 10
# 歌单/专辑拉取与翻页 (默认 单用户5 / 单对话10 / 单平台12 / 全局25)
PlaylistRateLimitPerUser = 5
PlaylistRateLimitPerChat = 10
PlaylistRateLimitPerPlatform = 12
PlaylistRateLimitGlobal = 25
# 分集(剧集/多 P)列表与翻页 (默认 单用户8 / 单对话20 / 单平台20 / 全局40)
EpisodeRateLimitPerUser = 8
EpisodeRateLimitPerChat = 20
EpisodeRateLimitPerPlatform = 20
EpisodeRateLimitGlobal = 40
# 歌手信息 (默认 单用户5 / 单对话10 / 单平台12 / 全局25)
ArtistRateLimitPerUser = 5
ArtistRateLimitPerChat = 10
ArtistRateLimitPerPlatform = 12
ArtistRateLimitGlobal = 25
# -------- 数据库与缓存 --------
# 自定义 sqlite3 数据库文件(默认为 cache.db)
Database = cache.db
# 设置与统计数据存放的数据库文件(默认为 data.db)
DataDatabase = data.db
# 数据库连接池最大连接数 (默认: 1)
DBMaxOpenConns = 1
# 数据库连接池最大空闲连接数 (默认: 1)
DBMaxIdleConns = 1
# 连接最大生命周期 (单位秒, 默认: 3600)
DBConnMaxLifetimeSec = 3600
# 每条数据库连接的 SQLite 页缓存大小 (单位 MiB, 默认: 16)
# 这份缓存按连接计, 两个库各自独立。实测对一个 ~43MB 的 cache.db 做全表扫描:
# 2MiB 约多占 4MB 内存, 16MiB 约 31MB, 64MiB 约 86MB。内存紧张的小机器
# (尤其是容器限额只有几百 MB 时) 不要调高, 否则容易被 OOM。
DBCacheSizeMB = 16
# 临时媒体目录(默认: ./cache;任务结束与下次启动时自动回收)
CacheDir = ./cache
# -------- 调试 --------
# pprof 性能分析监听地址 (默认: 空, 即关闭)
# 启用后可用 go tool pprof 抓取 CPU/堆/goroutine 剖面, 例如:
# go tool pprof http://127.0.0.1:6060/debug/pprof/heap
# 注意: 该端点不做任何鉴权, 会暴露完整的 goroutine 栈和堆内容,
# 请只绑定回环地址, 不要暴露到公网。
#DebugListenAddr = 127.0.0.1:6060
# -------- 并发与队列 --------
# worker pool 大小 (默认: 4)
WorkerPoolSize = 4
# 启动时允许回放的积压更新条数上限 (默认: 50;设为 0 表示不丢弃,始终全部回放)
# Telegram 会把 bot 离线期间的更新保留 24 小时,并在重启后的第一次拉取时一次性回放。
# 短暂重启只会积压少量更新,正常处理;若积压超过此上限,说明刚经历过较长时间的中断,
# 这些请求早已过期,且瞬间涌入足以在处理任何请求之前就耗尽内存导致再次崩溃,
# 因此直接丢弃并记录日志。
StartupBacklogLimit = 50
# Telegram API 发送队列:所有 send/edit/delete/upload API 调用会先进入这个队列,
# 再按单对话与全局 Telegram 限流发送,避免业务 goroutine 直接打满 Telegram API。
TelegramSendWorkerCount = 4
TelegramSendQueueSize = 256
# 下载任务 worker pool 大小 (默认: 0 自动;小于下载并发或全局活跃任务上限时会自动上调)
# 只承载下载/准备/上传链路,不再占用普通事件处理 worker。
DownloadWorkerPoolSize = 0
# 下载并发 (默认: 4) — 同时进行的下载数量上限
DownloadConcurrency = 4
# 下载等待下载槽上限 (默认: 20) — 已接收任务等待 DownloadConcurrency 槽位的数量上限。
# 0 表示不限制。正在排队的任务会显示"排队中"并附带一个查看实时排队数的按钮。
# 注意: Apple Music 无损/Hi-Res 走 wrapper 解密时全局只允许 1 首同时下载 (单 TCP 会话
# 串行),其余自动排队; 等待 wrapper 的任务不占用上面的下载并发槽位。
DownloadQueueWaitLimit = 20
# 下载任务公平入队上限:限制“已接收但未完成”的下载任务,防止单用户/单群刷满队列。
# 默认单用户最多 2 个、单对话最多 6 个、全局最多 24 个;0 表示禁用对应维度。
DownloadQueuePerUserLimit = 2
DownloadQueuePerChatLimit = 6
DownloadQueueGlobalLimit = 24
# 上传并发 (默认: 1)
UploadConcurrency = 1
# 上传队列大小 (默认: 20)
UploadQueueSize = 20
# -------- 搜索与默认行为 --------
# 默认音质 (standard|high|lossless|hires|atmos;atmos 仅适用于已启用的 Apple Music)
DefaultQuality = hires
# 默认平台 (例如: netease)
DefaultPlatform = netease
# 搜索回退平台 (默认: netease)
SearchFallbackPlatform = netease
# 搜索/歌单 单页展示条数 (默认: 8)
# 同时用于 inline 点第一行后“展开详情”页的每页数量
ListPageSize = 8
# Inline 查询结果页展示条数 (默认: 30, 最大: 30)
# 即你在输入框里看到的 inline 结果列表每页数量
InlineListPageSize = 30
# Inline 模式下载中转聊天 ID
# 用于将音频先上传到该聊天获取 file_id,再编辑 inline 消息为音频
# 建议填你的私聊 ID 或专用私有频道 ID(bot 需有发消息权限)
InlineUploadChatID = 0
# 愚人节彩蛋总开关(默认: false)
# 开启后也只会在 UTC+8 的 4 月 1 日生效
EnableAprilFools = false
# 文本恶搞概率(0-1,默认: 0.01 即 1%)
AprilFoolsTextPrankProbability = 0.01
# 曲目劫持概率(0-1,默认: 0.15 即 15%)
AprilFoolsTrackHijackProbability = 0.15
# -------- 下载 --------
# 下载超时时长 (单位秒, 默认为 60)
DownloadTimeout = 60
# 所有平台发送前使用 ffprobe 校验实际音频与目录完整时长,必须安装 ffprobe(Docker 已内置)。
# 试听、时长不符或无法校验的文件不发送;旧音频缓存首次使用时会重新下载校验。
# 是否启用 MD5 校验 (默认: true)
CheckMD5 = true
# 启用多线程下载 (默认: true)
EnableMultipartDownload = true
# 多线程下载并发数 (默认: 4, 推荐 4-8)
MultipartConcurrency = 4
# 多线程下载最小文件大小 (单位: MB, 默认: 5)
# 小于此大小的文件使用单线程下载
MultipartMinSizeMB = 5
# 自定义下载网络代理(HTTP Proxy)
# DownloadProxy = http://127.0.0.1:7890
# -------- 上游 API / HTML 解析代理 --------
# 仅影响平台插件访问上游 API、页面解析等请求;不接管最终音频文件下载。
# 若某个平台在 [plugins.xxx] 中显式配置 api_proxy_*,则以平台配置为准。
# ApiProxyEnabled = false
# 代理类型:http / https / baidu
# 当 type=baidu 时,使用 HTTP CONNECT tunnel,而不是普通 http(s) 代理。
# baidu 模式会对超时、网络错误及 429/502/503/504 自动重试,最多请求 3 次。
# ApiProxyType = http
# 代理主机,可写 host、host:port 或 scheme://host:port
# ApiProxyHost = 127.0.0.1
# 代理端口(当 Host 未带端口时使用)
# ApiProxyPort = 7890
# 标准 http(s) 代理可填 user:pass;baidu 模式下默认作为 X-T5-Auth。
# ApiProxyAuth = your-auth-or-user:pass
# 额外代理请求头。支持 JSON,或多行/| 分隔的 Header: Value。
# ApiProxyHeaders = {"User-Agent":"Mozilla/5.0"}
# -------- 日志与调试 --------
# 设置日志等级 [panic|fatal|error|warn|info|debug|trace] (默认为 info)
LogLevel = info
# 日志格式 [text|json] (默认为 text)
LogFormat = text
# 是否显示日志 source 信息 (默认为 false)
LogSource = false
# GORM 日志等级 [silent|error|warn|info] (默认为 warn)
GormLogLevel = warn
# 是否开启 bot 的 debug 功能
BotDebug = false
# -------- 识曲 --------
# 识曲服务端口 (默认: 3737)
RecognizePort = 3737
# 是否启用听歌识曲功能 (默认: true)
# 关闭后不启动 Node.js 识曲服务,不依赖 ffmpeg,命令列表中移除 /recognize
EnableRecognize = true
# ========================================
# 机器人名称 / 简介 (多语言, 可选)
# ========================================
# 覆盖内置的机器人名称和简介, 按语言分区, 留空或不写则使用内置文案。
# 语言代码为 ISO 639-1 两字母码 (en/zh/ja), 须是已支持的语言。
# 也可在运行时用管理员命令 /profile 查看和修改 (修改后立即推送到 Telegram)。
# name 机器人名称 (Telegram SetMyName)
# description 完整简介 (Telegram SetMyDescription, 进入对话前显示)
# short_description 短简介 (Telegram SetMyShortDescription, 资料页显示)
# [bot_profile.zh]
# name = MusicBot-Go 音乐机器人
# description = 发送歌曲名或链接,即可搜索和下载音乐。支持网易云音乐、QQ音乐等多个平台。
# short_description = 多平台音乐 / 歌词下载机器人
# [bot_profile.en]
# name = Music Bot
# description = Send a song name or link to search and download music.
# short_description = Multi-platform music / lyric download bot
# ========================================
# 插件配置 (Platform Plugins)
# ========================================
# 动态脚本插件目录 (默认: ./plugins/scripts,可指向外部插件仓库的 scripts 目录)
# PluginScriptDir = ./plugins/scripts
# 网易云音乐插件配置
[plugins.netease]
# 是否启用该插件 (默认: true)
enabled = true
# 是否禁用雷达歌单解析 (默认: true)
# 说明: 雷达歌单可能暴露账号听歌习惯,默认禁用更安全
# 如需开启雷达歌单解析,请显式设置为 false
disable_radar = true
# MUSIC_U Cookie (用于下载无损/Hi-Res 音质)
# 获取方式: 登录 music.163.com 后, 从浏览器 Cookie 中复制 MUSIC_U 值
music_u = YOUR_MUSIC_U_COOKIE
# 是否启用随机 IP 请求头伪装 (默认: true)
# 开启后会为网易云请求附加 X-Real-IP/X-Forwarded-For 等随机大陆网段 IP 头
spoof_ip = true
# 平台级 API 代理覆盖示例(优先级高于全局 ApiProxy*)
# 当前版本已接入 NetEase 上游 API 请求执行层;仅影响 API/解析请求,不影响最终下载文件。
# api_proxy_enabled = false
# api_proxy_type = http
# api_proxy_host = 127.0.0.1
# api_proxy_port = 7891
# api_proxy_auth = user:pass
# api_proxy_headers = {"User-Agent":"Mozilla/5.0"}
# QQ 音乐插件配置
[plugins.qqmusic]
# 是否启用该插件 (默认: true)
enabled = true
# QQ 音乐 Cookie(登录 y.qq.com 后从浏览器复制,需要使用 `` 包裹)
cookie = `YOUR_QQ_MUSIC_COOKIE`
# 请求超时(秒,默认: 10)
timeout = 10
# 自动续签开关(需要 Cookie 含 psrf_* 字段)
# auto_renew_enabled = true
# 自动续签间隔(秒,默认: 72000 ≈ 20h)
# auto_renew_interval_sec = 72000
# 平台级 API 代理覆盖示例(仅 QQMusic 上游 API 请求走代理,不影响最终下载)
# api_proxy_enabled = true
# api_proxy_type = http
# api_proxy_host = 127.0.0.1
# api_proxy_port = 7890
# api_proxy_auth = user:pass
# api_proxy_headers = {"X-Debug":"qqmusic"}
# Bilibili 插件配置
[plugins.bilibili]
# 是否启用该插件 (默认: true)
enabled = true
# Bilibili 账号 Cookie (登录后从浏览器复制,使用 `` 包裹)
# 获取大会员高音质需配置包含 SESSDATA 等字段的 Cookie。
# cookie = `YOUR_BILIBILI_COOKIE`
# 若需开启自动续期以防过期(推荐),请在浏览器 F12 (Application -> Local Storage)
# 中找到 ac_time_value,将其填入下方的 refresh_token 中:
# refresh_token = `YOUR_AC_TIME_VALUE`
# 自动续签开关(默认: false)
# auto_renew_enabled = false
# 自动续签检查间隔秒数(默认: 21600,即 6 小时)
# auto_renew_interval_sec = 21600
# 下载链接优先顺序:base / backup(默认 base)
# stream_url_priority = base
# 搜索最大页数(默认: 5)
# search_max_pages = 5
# 汽水音乐插件配置
[plugins.soda]
# 是否启用该插件 (默认: true)
enabled = true
# 汽水音乐 Cookie(建议使用 `` 包裹)
# 可通过统一命令导入:/login soda cookie <cookie>
# cookie = `YOUR_SODA_COOKIE`
# 请求超时(秒,默认: 15)
# timeout = 15
# 平台级 API 代理覆盖示例(仅汽水上游 API / 页面解析请求走代理,不影响最终下载文件)
# api_proxy_enabled = false
# api_proxy_type = http
# api_proxy_host = 127.0.0.1
# api_proxy_port = 7890
# api_proxy_auth = user:pass
# api_proxy_headers = {"User-Agent":"Mozilla/5.0"}
# Kugou 插件配置
[plugins.kugou]
# 是否启用该插件 (默认: true)
enabled = true
# 酷狗下载当前统一使用概念版会话链路
# 首次使用请先启动 Bot 后由管理员执行 /login kugou qr 扫码登录
# 是否启用概念版自动续期(默认: false,建议先手动验证 /login kugou renew 正常后再开)
concept_auto_refresh_enabled = false
# 概念版自动续期间隔秒数(默认: 21600,即 6 小时)
concept_auto_refresh_interval_sec = 21600
# 可选:验证码页面部署到自己的 Cloudflare Workers。触发风控时向用户返回短期验证链接。
# 账号和设备资料仍留在 Bot;Worker 只中转验证码结果。两项必须同时配置。
# verification_relay_url = https://musicbot-kugou-verification.YOUR_SUBDOMAIN.workers.dev
# verification_relay_secret = ``
# 部署方式见 workers/kugou-verification/README.md;secret 对应 Worker 的 BOT_API_SECRET。
# 以下 concept_* 字段一般无需手填,程序会在扫码登录、续期、状态更新后自动写回
# concept_cookie = ``
# concept_token = ``
# concept_user_id = ``
# concept_t1 = ``
# concept_vip_type = ``
# concept_vip_token = ``
# concept_nickname = ``
# concept_qr_key = ``
# concept_qr_url = ``
# concept_session_source = concept_qr
# concept_vip_expire_time = ``
# concept_last_check_time = ``
# concept_last_refresh_time = ``
# concept_last_sign_time = ``
# concept_last_vip_claim_time = ``
# concept_login_time = ``
# concept_dfid = ``
# concept_mid = ``
# concept_guid = ``
# concept_dev = ``
# concept_mac = ``
# 酷狗上游 API / HTML 解析代理(优先于 search_proxy,不影响最终下载文件直连)
# 开启后会覆盖 Kugou 搜索、歌单解析、share 页面解析、概念版账号状态与 song/url 等上游请求。
# 若同时配置全局 ApiProxy*,此处 api_proxy_* 显式值优先。
# api_proxy_enabled = false
# 代理类型:http / https / baidu
# 当 type=baidu 时,始终使用 HTTP CONNECT tunnel,而不是普通 http 代理。
# baidu 模式会对安全的 GET/HEAD 等请求自动重试,最多请求 3 次。
# api_proxy_type = baidu
# 代理主机,可写 host 或 scheme://host:port
# api_proxy_host = 127.0.0.1
# 代理端口
# api_proxy_port = 7890
# 代理认证/透传认证字段。
# - 标准 http(s) 代理可填 user:pass
# - baidu CONNECT 模式下会作为 X-T5-Auth 默认值发送
# api_proxy_auth = your-auth-or-user:pass
# 额外代理请求头。支持 JSON,或多行/| 分隔的 Header: Value。
# baidu CONNECT 常见示例:
# api_proxy_headers = {"Host":"153.3.236.22:443","X-T5-Auth":"your-auth","User-Agent":"Mozilla/5.0"}
# 也可写成:Host: 153.3.236.22:443|X-T5-Auth: your-auth|User-Agent: Mozilla/5.0
# api_proxy_headers = ``
# 酷狗搜索/歌单解析专用代理(仅这些请求走代理,不影响下载)
# 兼容旧配置;当 api_proxy_enabled=true 且配置完整时,新 api_proxy_* 优先。
# search_proxy = ``
# 酷我音乐插件配置(无需 Cookie;支持经实际校验的 Hi-Res / 无损 / 320 / 128)
[plugins.kuwo]
# 是否启用该插件(默认: true)
enabled = true
# 请求超时(秒,默认: 20)
# timeout = 20
# 无损直连 2000kflac,Hi-Res 直连 4000kflac;不会请求 jymaster 超分母带。
# 每首歌都会验证 RID、URL、实际 STREAMINFO、时长和精确大小;虚标 Hi-Res 会被拒绝。
# 下载沿用全局 DownloadProxy / DownloadTimeout / DownloadMaxRetries,并会精确清理已知的 FLAC 尾标记。
# 平台级 API 代理覆盖(只影响酷我 API / 解析请求,不接管最终媒体下载)
# api_proxy_enabled = false
# api_proxy_type = http
# api_proxy_host = 127.0.0.1
# api_proxy_port = 7890
# music-lib 移植平台。
# 重要:如果现有 config.ini 已经包含任意 [plugins.*] 段,程序只会加载显式列出的
# 插件;升级后请把需要的平台段复制进去。以下五个平台的 Cookie 都是可选项,只能
# 通过配置文件设置(修改后执行 /reload),暂不支持 /login ... cookie 导入。
# 每个平台都支持 timeout(默认 20 秒),也可按上面的格式添加 api_proxy_enabled、
# api_proxy_type、api_proxy_host、api_proxy_port、api_proxy_auth、api_proxy_headers;
# 平台级 API 代理不影响最终媒体下载,媒体下载仍使用全局 DownloadProxy。
# 咪咕音乐:歌曲、歌词、歌单和专辑
[plugins.migu]
enabled = true
# cookie = ``
# timeout = 20
# 千千音乐:歌曲、歌词、歌单和专辑;部分公开接口可能受地区或上游状态影响
[plugins.qianqian]
enabled = true
# cookie = ``
# timeout = 20
# 5sing:歌曲、歌词和歌单;不支持专辑
[plugins.fivesing]
enabled = true
# cookie = ``
# timeout = 20
# Jamendo:歌曲、歌单和专辑;上游不提供歌词
[plugins.jamendo]
enabled = true
# cookie = ``
# timeout = 20
# JOOX:歌曲、歌词、歌单和专辑
[plugins.joox]
enabled = true
# cookie = ``
# timeout = 20
# Apple Music 插件配置
[plugins.applemusic]
# 是否启用该插件 (默认: true)
enabled = true
# Apple Music media-user-token (登录 music.apple.com 后从浏览器 Cookie 中复制)
# 用于搜索、歌词、完整曲目下载等功能
# media_user_token = YOUR_MEDIA_USER_TOKEN
# 国家/地区代码 (默认: us,启动后会自动检测账号所在地区)
# storefront = us
# 元数据语言。不填则跟随账号 storefront 的默认语言;显式填写则始终使用你填的
# (前提是该 storefront 支持,否则 Apple 会忽略并回退)。可用 /login applemusic lang
# 命令查看账号支持哪些语言并在线设置(设置后自动回写本配置)。
# language = en-US
# 请求超时(秒,默认: 30)
# timeout = 30
# Wrapper 解密服务地址(用于无损 ALAC / Hi-Res / Dolby Atmos 下载)
# AAC 256k 由内置 Widevine 原生解密,开箱即用、无需此项。
# 但 Apple 只对 AAC 发放 Widevine 授权,无损/Hi-Res/Atmos 必须经由外部
# FairPlay wrapper (https://github.com/WorldObservationLog/wrapper) 解密。
# 配置后,请求 lossless/hires 音质会路由到 wrapper;不可用时自动回退 AAC 256k。
# Docker 用户:docker-compose.yml 已内置 wrapper 服务(需用 Apple ID 单独登录一次,
# 详见 docker/wrapper/README.md),此处填 wrapper_host = wrapper 即可。
# wrapper_host = 127.0.0.1
# Widevine L3 原生解密默认开箱即用(内置公共测试设备凭证,无需任何配置)。
# 如需使用自己的 L3 设备,可填写下面两个文件路径进行覆盖(可选):
# wv_client_id = widevine/client_id.bin
# wv_private_key = widevine/private_key.pem
# YouTube Music 插件配置
[plugins.youtubemusic]
# 是否启用该插件 (默认: true)
enabled = true
# music.youtube.com 的 Cookie(可选)。匿名即可搜索/获取元数据/下载多数曲目;
# 配置登录后的 Cookie 可解锁 256k 音质并降低被限流概率。建议用 `` 包裹。
# cookie = `YOUR_YOUTUBE_MUSIC_COOKIE`
# 请求超时(秒,默认: 20)
# timeout = 20
# 平台级 API 代理覆盖(仅 InnerTube API 请求走代理,不影响最终音频下载)
# api_proxy_enabled = false
# api_proxy_type = http
# api_proxy_host = 127.0.0.1
# api_proxy_port = 7890
# Spotify 插件配置
[plugins.spotify]
# 是否启用该插件 (默认: true)
enabled = true
# 搜索与元数据:优先使用 Spotify Web API(Client Credentials 流程),
# 没有 Web API 权限时会使用下面的 sp_dc 走网页播放器接口。
# 如需配置 Web API,可在 https://developer.spotify.com/dashboard 创建应用:
# client_id = YOUR_SPOTIFY_CLIENT_ID
# client_secret = YOUR_SPOTIFY_CLIENT_SECRET
#
# 下载(音频):只用原生 Spotify 音频,无跨平台回退。走网页播放器 + Widevine
# 路径——直接从 Spotify CDN 取 CENC 加密的 AAC/MP4,用你自备的 Widevine L3 设备
# 拿解密密钥,纯 Go 解密(无需 ffmpeg/外部进程),产出真正的 Spotify 音轨。
# 音质上限为 AAC 256k(无损/Hi-Res 走 playplay DRM,开源无法解,故不支持)。
#
# 需要两样东西:
# A) 你的 sp_dc cookie(一个已登录 open.spotify.com 的网页会话):
# 1) 浏览器登录 open.spotify.com
# 2) F12 → Application → Cookies → https://open.spotify.com → 复制 sp_dc 的值
# 3) 填到下面 sp_dc = ...
# 免费账号即可(出 AAC 128k);Premium 出 AAC 256k。cookie 失效后重新获取即可。
# sp_dc = YOUR_SP_DC_COOKIE
#
# B) 一个 Widevine L3 设备文件(.wvd)。本仓库不内置可用于 Spotify 的 DRM 私钥。
# 重要:Spotify 会封禁公开/泄露的 Widevine 设备(Apple Music 接受的那份公开
# 设备,Spotify 的 license 服务器会回 403 拒绝),所以必须用你自己从一台真实
# 安卓设备(Android 13/14+ 最佳,模拟器/老设备指纹也常被封)用 KeyDive 提取
# 的 .wvd。把路径填到 wvd_path。
# wvd_path = ./spotify.wvd
#
# 先验证 cookie 与整条链路是否可用(会下载并解密一首歌写到 cache/ 作为证据):
# ./MusicBot-Go -spotify-cookie 'YOUR_SP_DC' -c config.ini
#
# 说明:不配 client_id/secret 时,带 sp_dc 的搜索、曲目、歌手、专辑和歌单浏览
# 会通过网页播放器 Pathfinder 获取元数据,歌词通过网页播放器歌词接口获取
# (歌词只需要 sp_dc,不需要 wvd_path);
# client_id/secret 只是可选的 Spotify Web API 优先路径。
# 不配 sp_dc / wvd_path,或曲目被 DRM(playplay)/区域限制无法取得原生音轨时,
# 下载会直接报错——绝不偷偷换成其它平台的录音。
#
# 元数据/搜索的市场区域(ISO 3166-1 alpha-2,默认: US)
# market = US
# 请求超时(秒,默认: 15)
# timeout = 15
# 平台级 API 代理覆盖
# api_proxy_enabled = false
# api_proxy_type = http
# api_proxy_host = 127.0.0.1
# api_proxy_port = 7890